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.
【U/Day Tokyo 2025】Cygames流 最新スマートフォンゲームの技術設計 〜『Shadowverse: Worlds Beyond』におけるアーキテクチャ再設計の挑戦~
cygames
PRO
4
15k
【CEDEC+KYUSHU2025】学生・若手必見!テクニカルアーティスト 大全 ~仕事・スキル・キャリアパス、TAの「わからない」を徹底解剖~
cygames
PRO
1
1.2k
【TiDB User Day2025】リリース時のアクセス急増をいかにしてノーメンテで乗り越えたか 〜『Shadowverse: Worlds Beyond』におけるTiDB採用のゲームサーバー設計〜
cygames
PRO
1
2.8k
【CEDEC2025】『Shadowverse: Worlds Beyond』二度目のDCG開発でゲームをリデザインする~遊びやすさと競技性の両立~
cygames
PRO
2
850
【CEDEC2025】大規模言語モデルを活用したゲーム内会話パートのスクリプト作成支援への取り組み
cygames
PRO
2
2.5k
【CEDEC2025】現場を理解して実現!ゲーム開発を効率化するWebサービスの開発と、利用促進のための継続的な改善
cygames
PRO
0
1.8k
【CEDEC2025】ブランド力アップのためのコンテンツマーケティング~ゲーム会社における情報資産の活かし方~
cygames
PRO
0
1.9k
【CEDEC2025】『ウマ娘 プリティーダービー』における映像制作のさらなる高品質化へ!~ 豊富な素材出力と制作フローの改善を実現するツールについて~
cygames
PRO
0
680
【CEDEC2025】LLMを活用したゲーム開発支援と、生成AIの利活用を進める組織的な取り組み
cygames
PRO
1
5k
Other Decks in Technology
See All in Technology
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
610
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
5
1.7k
LLMにもCAP定理があるという話
harukasakihara
0
310
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
130
AIのReact習熟度を測る
uhyo
2
200
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
370
Microsoft Build Keynoteふりかえり
tomokusaba
0
120
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.2k
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
0
2.1k
連合学習と機密コンピューティング
lycorptech_jp
PRO
0
110
RAG を使わないという選択肢
tatsutaka
1
200
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
140
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
The Language of Interfaces
destraynor
162
27k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
Ethics towards AI in product and experience design
skipperchong
2
310
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Site-Speed That Sticks
csswizardry
13
1.2k
Six Lessons from altMBA
skipperchong
29
4.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
840
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
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.