Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cygamesにおける次世代ハイエンドコンソール向けゲームエンジンの開発 ~最高のコンテンツを...
Search
Cygames, Inc.
PRO
September 08, 2017
Technology
14k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cygamesにおける次世代ハイエンドコンソール向けゲームエンジンの開発 ~最高のコンテンツを支えるゲームエンジン~
2017/08/30 CEDEC 2017
Cygames, Inc.
PRO
September 08, 2017
More Decks by Cygames, Inc.
See All by Cygames, Inc.
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
3
25k
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
840
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
2
1.1k
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
1.5k
【CEDEC2026】派手さと見やすさは両立できる!『Shadowverse: Worlds Beyond』エフェクト・3D背景の超進化したビジュアル設計
cygames
PRO
0
1.3k
【CEDEC2026】『Shadowverse: Worlds Beyond』続編開発におけるUIデザイン・アニメーション演出の「超進化」 ~継承と挑戦を両立するデザイン手法~
cygames
PRO
2
4.7k
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
0
190
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
1
320
【CEDEC2026】アートとゲームデザインをつなぐVFX設計『GRANBLUE FANTASY: Relink - Endless Ragnarok』における表現と可読性の両立
cygames
PRO
0
710
Other Decks in Technology
See All in Technology
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
130
案件に一番詳しいAIを Amazon Bedrock AgentCore で作る ― 知見が知見を生むチームへ / Compounding Knowledge with AgentCore
yusukeshimizu
1
110
What's new in Go 1.27?
ciarana
0
170
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
17
7.5k
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
320
同じWAFが、攻撃の“形”は弾く── 正当な“形”の不正は通す
kuroneko13
0
220
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
0
510
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
ラジオの科学
frievea
0
330
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
130
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
New Earth Scene 8
popppiees
3
2.5k
The SEO Collaboration Effect
kristinabergwall1
1
520
Navigating Weather and Climate Data
rabernat
0
480
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Agile that works and the tools we love
rasmusluckow
331
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Leo the Paperboy
mayatellez
8
2.1k
Skip the Path - Find Your Career Trail
mkilby
1
180
Transcript
© 2017 Cygames, Inc. Cygames における 次世代ハイエンドコンソール向け ゲームエンジンの開発 ~最高のコンテンツを支えるゲームエンジン~ 株式会社
Cygames 多胡 順司 1
© 2017 Cygames, Inc. サマリー • Cyllista Game Engine の紹介
• ゲーム開発者がイテレーションを速く回せる ようにするための取り組み 2
© 2017 Cygames, Inc. 自己紹介 • 多胡 順司 • 株式会社
Cygames • 技術本部 Cyllista Game Engine 統括マネージャー 3
© 2017 Cygames, Inc. Cyllista Game Engine デモムービー 4 ※デモであり開発中のゲームとは関係ありません。
© 2017 Cygames, Inc. 5
© 2017 Cygames, Inc. Cyllista Game Engine 6 内製統合型ゲームエンジン ランタイム
+ エディタ ハイエンドコンソール向け PlayStation 4
© 2017 Cygames, Inc. Cyllista Game Engine の目標 7 最高のゲームエンジン
© 2017 Cygames, Inc. エンジンの目標 8 最高のゲームエンジン ゲーム開発者が 最高のパフォーマンスを 出せる
ハードウェアが 最高のパフォーマンスを 出せる
© 2017 Cygames, Inc. エンジンの目標 • ハードウェアの性能を最大限に引き出す – ジョブシステム –
データ指向設計 • http://tech.cygames.co.jp/archives/2843/ 9 ハードウェアが最高のパフォーマンスを出せる
© 2017 Cygames, Inc. エンジンの目標 10 ゲーム開発者が最高のパフォーマンスを出せる イテレーションを 速く回す!
© 2017 Cygames, Inc. エンジンの目標 • コンテンツ制作者 – ゲームデザイナー、レベルデザイナー –
アーティスト – サウンドデザイナー – QA – ゲームエンジニア • エンジン開発者 11 ゲーム開発者が最高のパフォーマンスを出せる
© 2017 Cygames, Inc. エンジンの目標 12 エンジン開発者が最高のパフォーマンスを出せる ハードウェアが最高のパフォーマンスを出せる
© 2017 Cygames, Inc. エンジンの目標 13 最高のゲームエンジン ハードウェアが 最高のパフォーマンスを 出せる
ゲーム開発者が 最高のパフォーマンスを 出せる 今回はこちらの話 が中心!
© 2017 Cygames, Inc. ゲーム開発者 14 エンジン 開発者 ゲームプログラム 開発者
ゲームコンテンツ 開発者 • エンジニア • エンジニア • ゲームデザイナ • アーティスト • サウンドデザイナ
© 2017 Cygames, Inc. ゲーム開発者 15 エンジン 開発者 ゲームプログラム 開発者
ゲームコンテンツ 開発者 モジュール化 テスト駆動開発 開発ツール ユーザーコード 開発効率の最適化 アセットシステム アセット プレビュー 開発言語の統一 コードの自動整形 ビルド時間の短縮
© 2017 Cygames, Inc. エンジン開発者向け 16 エンジン 開発者 ゲームプログラム 開発者
ゲームコンテンツ 開発者 モジュール化 テスト駆動開発 開発ツール ユーザーコード 開発効率の最適化 アセットシステム アセット プレビュー 開発言語の統一 コードの自動整形 ビルド時間の短縮
© 2017 Cygames, Inc. モジュール化 17
© 2017 Cygames, Inc. ゲームエンジンのモジュール構成 • 機能ごとにモジュール化 • レイヤー構成 18
Core Gfx … Game Tool Kit Application Anm Col Snd
© 2017 Cygames, Inc. モジュール • 依存は下向きの一方向 – 相互依存不可 •
モジュールごとに DLL化 19 Core Gfx … Game Tool Kit Anm Col Snd
© 2017 Cygames, Inc. モジュール化の利点 • ユーザー視点 – 必要なモジュールだけを取り出して利用可能 •
開発者視点 – ビルド時間の短縮 • 依存しているモジュールだけで開発可能 • 開発しているモジュールだけがリンク対象 20
© 2017 Cygames, Inc. モジュールの開発 21 テスト駆動開発 (TDD) モジュールの公開 API
をテスト
© 2017 Cygames, Inc. テスト駆動開発 22
© 2017 Cygames, Inc. テスト駆動開発 1. テストコードを書く 2. テストが失敗するように実装する 3.
テストが通る最小限の実装を記述する 以上を繰り返す 23
© 2017 Cygames, Inc. テスト駆動開発 • テストを書く 24 // MySystem.h
// MySystem.cpp // MySystemTest.cpp // MySystemTest.cpp void MySystemTest() { MySystem* mySystem = MySystemGet(); ASSERT_TRUE(mySystem != nullptr); }
© 2017 Cygames, Inc. // MySystem.h // MySystem.cpp テスト駆動開発 •
テストが失敗する 実装を書く 25 // MySystem.h class MySystem { }; // MySystem.cpp MySystem* MySystemGet() { return nullptr; } // MySystemTest.cpp void MySystemTest() { MySystem* mySystem = MySystemGet(); ASSERT_TRUE(mySystem != nullptr); }
© 2017 Cygames, Inc. // MySystem.cpp MySystem* MySystemGet() { return
nullptr; } テスト駆動開発 • テストが通る 最低限の実装を書く 26 // MySystem.h class MySystem { }; // MySystem.cpp class MySystemImpl : public MySystem { }; static MySystemImpl g_mySystem; MySystem* MySystemGet() { return &g_mySystem; } // MySystemTest.cpp void MySystemTest() { MySystem* mySystem = MySystemGet(); ASSERT_TRUE(mySystem != nullptr); }
© 2017 Cygames, Inc. // MySystemTest.cpp void MySystemTest() { MySystem*
mySystem = MySystemGet(); ASSERT_TRUE(mySystem != nullptr); } テスト駆動開発 • 新たなテストを書く 27 // MySystem.h class MySystem { }; // MySystem.cpp class MySystemImpl : public MySystem { }; static MySystemImpl g_mySystem; MySystem* MySystemGet() { return &g_mySystem; } // MySystemTest.cpp void MySystemTest() { MySystem* mySystem = MySystemGet(); ASSERT_TRUE(mySystem != nullptr); MyObject* obj = mySystem->createObject(); ASSERT_TRUE(obj != nullptr); }
© 2017 Cygames, Inc. // MySystem.h class MySystem { };
// MySystem.cpp class MySystemImpl : public MySystem { }; static MySystemImpl g_mySystem; MySystem* MySystemGet() { return &g_mySystem; } テスト駆動開発 • テストが失敗する 実装を書く 28 // MySystem.h class MyObject { }; class MySystem { virtual MyObject* createObject() = 0; }; // MySystem.cpp class MySystemImpl : public MySystem { virtual MyObject* createObject() { return nullptr; } }; static MySystemImpl g_mySystem; MySystem* MySystemGet() { return &g_mySystem; } // MySystemTest.cpp void MySystemTest() { MySystem* mySystem = MySystemGet(); ASSERT_TRUE(mySystem != nullptr); MyObject* obj = mySystem->createObject(); ASSERT_TRUE(obj != nullptr); }
© 2017 Cygames, Inc. // MySystem.cpp class MySystemImpl : public
MySystem { virtual MyObject* createObject() { return nullptr; } }; static MySystemImpl g_mySystem; MySystem* MySystemGet() { return &g_mySystem; } テスト駆動開発 • テストが通る 最低限の実装を書く 29 // MySystem.h class MyObject { }; class MySystem { virtual MyObject* createObject() = 0; }; // MySystem.cpp class MyObjectImpl : public MyObject { }; class MySystemImpl : public MySystem { virtual MyObject* createObject() { return new MyObjectImpl(); } }; static MySystemImpl g_mySystem; MySystem* MySystemGet() { return &g_mySystem; } // MySystemTest.cpp void MySystemTest() { MySystem* mySystem = MySystemGet(); ASSERT_TRUE(mySystem != nullptr); MyObject* obj = mySystem->createObject(); ASSERT_TRUE(obj != nullptr); }
© 2017 Cygames, Inc. TDD の利点 • コードが安定する – CI
(Jenkins) などで常時実行 • ユーザー視点での API の設計 • リファクタリングの障壁が下がる – コードがさらに安定 30
© 2017 Cygames, Inc. TDD の利点 31 安心感
© 2017 Cygames, Inc. TDD の問題点 • 導入が難しい 32 「面倒くさい!」
「テストコード書く意味あるの?」
© 2017 Cygames, Inc. TDD の導入方法 33 TDD 以外の開発方法を 提供しない!!!
© 2017 Cygames, Inc. TDD の導入方法 34 エンジン開発ツールで TDD の手間を省く
© 2017 Cygames, Inc. エンジン開発ツール 35
© 2017 Cygames, Inc. cybuild • エンジン開発で利用する唯一のツール • エンジン開発で必要なことはなんでも出来る 36
© 2017 Cygames, Inc. cybuild 37 CUI
© 2017 Cygames, Inc. cybuild コマンド • cybuild update –
ソースコード・ツール・アセットの更新 • cybuild test <module> – モジュールのテスト • cybuild push – ソースコード・ツール・アセットのサブミット 38
© 2017 Cygames, Inc. cybuild によるテスト駆動開発 • cybuild test Gfx
premake build run – Gfx モジュールのビルド・テストの実行 • cybuild test Gfx premake build run -p ps4 – PlayStation 4 版のテスト • cybuild test Gfx premake --open – sln ファイルを開く 39
© 2017 Cygames, Inc. cybuild のデモ 40 デモムービー
© 2017 Cygames, Inc. 41
© 2017 Cygames, Inc. cybuild の主な機能 • モジュールのテスト • ドキュメント生成
• エディタの起動 • 中間ファイルの削除 • ファイルの変更状態の表示 42
© 2017 Cygames, Inc. cybuild の利点 43 ツールのヘルプ • “-h”
オプション • コマンド一覧 CI での実行 • そのまま組み込み すべてのツールを ひとつに! • 迷わない • 覚えることは ひとつ Doxygen
© 2017 Cygames, Inc. プログラミング言語の統一 44
© 2017 Cygames, Inc. プログラミング言語の統一 45 C++ • エンジンランタイム •
速度の要求される アセット変換処理 Python • ツール • レベルエディタ • cybuild • アセット変換処理
© 2017 Cygames, Inc. Python の利点 • モジュールが充実 – 何かしようと思ったらほとんどの場合モジュールが存在する
46 Python 114,862 https://rubygems.org/ https://pypi.python.org/pypi Ruby 8,726
© 2017 Cygames, Inc. Python の利点 • ツールの配布が容易 – VCS
(Perforce) に submit するだけ – 使う側は sync するだけ 47
© 2017 Cygames, Inc. Python の利点 • コードの共有が容易 – 内製コードのモジュール化
– import すればすぐに利用可能 48 from cy import log log.info(‘hello world!’)
© 2017 Cygames, Inc. Python の利点 • テスト駆動開発 49 import
unittest class MyModuleTest(unittest.TestCase): def test_do_something(self): self.assertTrue(…)
© 2017 Cygames, Inc. コードの自動整形 50
© 2017 Cygames, Inc. ソースコードの自動整形 • C++ – clang-format で自動整形
• Python – pep8 / flake で自動整形 51
© 2017 Cygames, Inc. 自動整形の利点 52 インデントの タブ/スペース論争の終焉
© 2017 Cygames, Inc. 自動整形の利点 53 コードの中身に集中 書くときも 読むときも
© 2017 Cygames, Inc. 自動整形の呼び出し 54 cybuild format
© 2017 Cygames, Inc. ゲームプログラム開発者向け 55 エンジン 開発者 ゲームプログラム 開発者
ゲームコンテンツ 開発者 モジュール化 テスト駆動開発 開発ツール ユーザーコード 開発効率の最適化 アセットシステム アセット プレビュー 開発言語の統一 コードの自動整形 ビルド時間の短縮
© 2017 Cygames, Inc. ユーザーコード開発効率の最適化 56
© 2017 Cygames, Inc. ユーザーコードの開発効率 57 Core Gfx … Game
Tool Kit Application Anm Col Snd テスト駆動開発 テスト駆動開発 + ?
© 2017 Cygames, Inc. ユーザーコードはC++ 58 利点 • 速い •
詳細な最適化が可能 • イテレーションが遅い • コンパイル • リンク • 読み込み 欠点
© 2017 Cygames, Inc. Runtime Compiled C++ (RCC) 59 プログラムを実行中に
C++ コードを更新可能 http://runtimecompiledcplusplus.blogspot.jp/
© 2017 Cygames, Inc. Runtime Compiled C++ デモ 60 デモムービー
© 2017 Cygames, Inc. 61
© 2017 Cygames, Inc. RCC の原理 • RccObject クラス –
RCC の最小単位 62 // MyActorA.cpp class MyActorAImpl : public MyActorA, public RccObject { ... }; // RccObject.h class RccObject { virtual void initialize() = 0; virtual void terminate() = 0; virtual void* getInterface(InterfaceId) = 0; virtual void serialize(Serializer*) = 0; };
© 2017 Cygames, Inc. RCC の原理 • .cpp ファイルは通常 どおりコンパイル・リ
ンク 63 MyActorA .cpp MyActorB .cpp MyActorC .cpp MyApp.exe
© 2017 Cygames, Inc. RCC の原理 • RccObject は システムで管理
64 MyActorA .cpp MyActorB .cpp MyActorC .cpp MyApp.exe MyActorA MyActorB MyActorC MyActorC MyActorC MyActorA
© 2017 Cygames, Inc. RCC の原理 • .cpp ファイルの変更 を検出
• 変更された .cpp を コンパイル • 一時的な .dll に リンク 65 MyActorA .cpp MyActorB .cpp MyActorC .cpp MyApp.exe MyActorA MyActorB MyActorC MyActorC MyActorC MyActorA MyActorA’ .cpp tmp.dll
© 2017 Cygames, Inc. RCC の原理 • 古いインスタンスを シリアライズ 66
MyActorA .cpp MyActorB .cpp MyActorC .cpp MyApp.exe MyActorA MyActorB MyActorC MyActorC MyActorC MyActorA MyActorA’ .cpp tmp.dll Serializer Serializer Serialize
© 2017 Cygames, Inc. RCC の原理 • 不要になった RccObject を削除
67 MyActorA .cpp MyActorB .cpp MyActorC .cpp MyApp.exe MyActorB MyActorC MyActorC MyActorC MyActorA’ .cpp tmp.dll Serializer Serializer Deserialize
© 2017 Cygames, Inc. RCC の原理 • 新しいコードから 新しいRccObjectを 生成
• 古い状態を デシリアライズ 68 MyActorA .cpp MyActorB .cpp MyActorC .cpp MyApp.exe MyActorB MyActorC MyActorC MyActorC MyActorA’ .cpp tmp.dll Serializer Serializer Deserialize MyActorA’ MyActorA’
© 2017 Cygames, Inc. RCC の原理 • 新しいコードで動作 • 古いコードは
利用されない 69 MyActorA .cpp MyActorB .cpp MyActorC .cpp MyApp.exe MyActorB MyActorC MyActorC MyActorC MyActorA’ .cpp tmp.dll MyActorA’ MyActorA’
© 2017 Cygames, Inc. RCC サンプル 70 // RccObject の生成
RccObjectHandle actorHandle = rccSystem->createRccObject(MY_ACTOR_A); // ハンドルからインターフェースを取得 MyActorA* actor = actorHandle.getInterface<MyActorA>(); // 処理の呼び出し actor->act();
© 2017 Cygames, Inc. RCC サンプル 71 // MyActor.cpp class
MyActorAImpl : public MyActorA, public RccObject { virtual void initialize(); virtual void terminate(); virtual void* getInterface(InterfaceId id) { if (id == MY_ACTOR_ID) { return static_cast<MyActorA*>(this);} return nullptr; } virtual serialize(Serializer* serializer); // MyActorA virtual void act(); };
© 2017 Cygames, Inc. RCC の制限 • 外部関数呼び出しの制限 – inline
/ virtual 関数のみ • システム関数 – グローバル関数は virtual にできない – グローバル関数はシステムクラスのメンバ関数に – すべてのシステムクラスを SystemTable に登録 – SystemTable 自体のアドレスは tmp.dll 読み込み後に .dll 側の コードに渡す 72 MySystem* mySystem = SystemTableGet()->getMySystem(); mySystem->doSystemThings();
© 2017 Cygames, Inc. エンジン API • すべての API を
RccObject から呼び出し可能 73 inline • 軽量な関数 • 頻繁に呼び出される 関数 virtual • 複雑な関数 • 実装を隠蔽する 必要がある関数
© 2017 Cygames, Inc. RCC の利点・欠点 利点 • 高速なイテレーション •
SystemTable での API の一覧性 • コンパイル時間の短縮 – リンカがなにもしない • Visual Studio で デバッグ可能 欠点 • virtual 呼び出しの オーバーヘッド • 専用のシリアライズ処理 の実装の必要性 74
© 2017 Cygames, Inc. ビルド時間の短縮 75
© 2017 Cygames, Inc. ビルド時間 76 エンジニアの イテレーション速度に 直結
© 2017 Cygames, Inc. ビルド時間 • 有効行数 40万行のフルビルド – エンジンコード
+ アプリケーションコード (13万行) – その他ライブラリコード 77 30秒
© 2017 Cygames, Inc. ビルド時間 • アプリケーション側のコードの修正 78 ~5秒
© 2017 Cygames, Inc. ビルド時間 • 実行時コンパイル – コンパイル +
読み込み 79 ~2秒
© 2017 Cygames, Inc. ビルド時間の短縮 • 不要なヘッダはインクルードしない • template の利用は最小限
• ツールはビルド不要 • CI で常に監視 80
© 2017 Cygames, Inc. ビルド時間の短縮 81 速いPC 速いCPU + 速いディスク
© 2017 Cygames, Inc. ゲームコンテンツ開発者向け 82 エンジン 開発者 ゲームプログラム 開発者
ゲームコンテンツ 開発者 モジュール化 テスト駆動開発 開発ツール ユーザーコード 開発効率の最適化 アセットシステム アセット プレビュー 開発言語の統一 コードの自動整形 ビルド時間の短縮
© 2017 Cygames, Inc. アセットシステム 83
© 2017 Cygames, Inc. アセットフロー 84 元データ ファイル 中間 ファイル
実機用 ファイル アーカイブ ファイル エクスポート コンバート コンバート
© 2017 Cygames, Inc. アセットコンバートフロー 85 Maya ファイル .ma モデル
中間ファイル .imdl モデル ランタイムファイル .mdl アーカイブファイル .arc マテリアル 中間ファイル .imtl コリジョン 中間ファイル .icol コリジョン ランタイムファイル .col PSD ファイル .psd テクスチャ 中間ファイル .itex テクスチャ ランタイムファイル .tex マテリアル ランタイムファイル .mtl
© 2017 Cygames, Inc. アセットシステムの要件 86 任意のバージョンのアセットを 高速に取得したい
© 2017 Cygames, Inc. アセットのバージョン管理の問題点 • ファイルサイズが大きい • ファイル数が多い –
更新処理に非常に時間がかかる • 依存が複雑 – 多数のファイルから依存されているファイルの更新が重い 87
© 2017 Cygames, Inc. アセットの運用の特徴 • 一部のアセットのみが必要 – 「ステージA」を開発している間は 「ステージB」のアセットは不要
– ファイルの読み込みリクエストがあったときに 初めてファイルを用意する 88
© 2017 Cygames, Inc. メタファイル • アセットの関係性の情報を保持 • 単一ディレクトリ以下にまとめる 89
中間 ファイル 実機用 ファイル アーカイブファイル メタファイル メタファイル メタファイル
© 2017 Cygames, Inc. バージョン管理 • 中間ファイルとメタファイルのみ バージョン管理 • 実機用ファイルとアーカイブファイルは
中間ファイルから生成する 90 中間 ファイル 実機用 ファイル アーカイブファイル メタファイル メタファイル メタファイル
© 2017 Cygames, Inc. アセットコンバートフロー 91 .imdl .mdl .arc .imtl
.icol .col .itex .tex .mtl .imdl.meta .mdl.meta .arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットコンバートフロー 92 .imdl.meta .mdl.meta .arc.meta .mtl.meta
.col.meta .tex.meta .imtl.meta .icol.meta .itex.meta 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットコンバートフロー • アーカイブファイルをリクエスト 93 .imdl.meta .mdl.meta
.arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta .arc リクエスト 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットコンバートフロー • メタファイルの情報から 必要な実機用ファイルをリクエスト 94 .imdl.meta
.mdl.meta .arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta .arc .mdl .col .tex .mtl 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットコンバートフロー • 更に必要な中間ファイルリクエスト 95 .imdl.meta .mdl.meta
.arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta .arc .mdl .col .tex .mtl .imdl .imtl .icol .itex 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットコンバートフロー • 中間ファイルは VCS から取得 96
.imdl.meta .mdl.meta .arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta .arc .mdl .col .tex .mtl .imdl .imtl .icol .itex 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットコンバートフロー • コンバート処理 97 .imdl.meta .mdl.meta
.arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta .arc .imdl .imtl .icol .itex .mdl .col .tex .mtl 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットコンバートフロー • コンバート処理 98 .imdl.meta .mdl.meta
.arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta .imdl .imtl .icol .itex .mdl .col .tex .mtl .arc 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットエクスプローラー • メタファイルを扱う – メタファイルを実ファイルのように扱う •
実体がローカルにないファイルの表示可能 99 実体が存在しない ファイル
© 2017 Cygames, Inc. アセットキャッシュ • コンバート処理を毎回するのは重い • コンバート結果をキャッシュ –
コンバート情報をハッシュ化した単純な key-value – ローカルキャッシュ – サーバーキャッシュ • キャッシュにヒットしなければ コンバート – 結果はローカル・サーバーに登録 100
© 2017 Cygames, Inc. アセットキャッシュ • アーカイブファイルをリクエスト 101 .imdl.meta .mdl.meta
.arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta .arc リクエスト 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットキャッシュ • キャッシュを取得して完了 102 .imdl.meta .mdl.meta
.arc.meta .mtl.meta .col.meta .tex.meta .imtl.meta .icol.meta .itex.meta ローカル キャッシュ サーバー キャッシュ .arc 中間 実機用 アーカイブ
© 2017 Cygames, Inc. アセットシステム • メタファイルを導入することで 任意のバージョンを高速に取得 • ローカル/サーバーキャッシュを用意することで
目的のファイルを高速に取得 103
© 2017 Cygames, Inc. アセットプレビュー 104
© 2017 Cygames, Inc. アセットプレビュー • DCC ツールから実機へのプレビューの高速化 – イテレーション速度に直結
105
© 2017 Cygames, Inc. アセットプレビューのデモ 106 デモムービー
© 2017 Cygames, Inc. 107
© 2017 Cygames, Inc. 中間ファイル • 専用バイナリフォーマット – 出力処理の高速化 –
読み込み処理の高速化 • プレビュー専用のモードを用意 – 表示に影響しない最適化を無効化 108
© 2017 Cygames, Inc. 専用フォーマット vs FBX • 100,000トライアングルのモデルの エクスポート
+ コンバート時間 [msec] 109 0 100 200 300 400 500 600 700 800 900 1000 専用フォーマット FBX x3.6 高速!
© 2017 Cygames, Inc. プレビュー専用モード • 100,000トライアングルのモデルの コンバート時間 [msec] 110
x3.1 高速! 0 50 100 150 200 250 300 350 プレビューモード 通常モード
© 2017 Cygames, Inc. まとめ 111 エンジン 開発者 ゲームプログラム 開発者
ゲームコンテンツ 開発者 モジュール化 テスト駆動開発 開発ツール ユーザーコード 開発効率の最適化 アセットシステム アセット プレビュー 開発言語の統一 コードの自動整形 ビルド時間の短縮
© 2017 Cygames, Inc. まとめ 112 Cyllista Game Engine は
ゲーム開発者が 最高のパフォーマンスを発揮できることを 徹底的に追求しています!!!
© 2017 Cygames, Inc.