Presentation is loading. Please wait.

Presentation is loading. Please wait.

Unityゲーム開発 パイプライン事例紹介

Similar presentations


Presentation on theme: "Unityゲーム開発 パイプライン事例紹介"— Presentation transcript:

1 Unityゲーム開発 パイプライン事例紹介
Maya×Unity、Jenkins×ChatOpsによる自動化事例 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

2 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
自己紹介 村上 学 ゲーム業界歴7年目 最初はモーションデザイナー 現在はTAとして4年ほど活動中 パイプライン構築が専門 現在はTokyo RPG Factory に所属 テクニカルアーティストの仕事とスキル Tokyo RPG Factory ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

3 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
セッションの概要 Tokyo RPG Factory 1作目「いけにえと雪のセツナ」は Maya×Unityで開発。 スタッフのほとんどがUnity開発経験ゼロ、過去資産ゼロという状況でスタート。 国内盤「いけにえと雪のセツナ」は PlayStation 4, PlayStation Vita で発売中。 海外版「I am Setsuna」は PlayStation 4, Steam で発売中。 今回のセッションはこちらのプロジェクトの事例紹介になります。 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

4 目次 事例1.データ入出力パイプライン 事例2.アーティストのためのJenkins Appendix
スライドは公開しますので写真撮影は不要です。 事例1.データ入出力パイプライン 事例2.アーティストのためのJenkins Appendix AppendixはJenkinsに関する補足資料を記載しています。 セッション中には触れませんので、公開されたスライドでチェックしてみてください。 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

5 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
事例1.データ入出力パイプライン Mayaデータを最終的なゲームデータにするには、多くの手作業が存在している データ出力 Prefab生成 データ出力:  頻繁に行うので、通常メニューを  何度も操作するのは非常に手間がかかる。 ・UI手動オペレーション ・出力先の指定 ・出力オプションの設定 Prefab生成:  アーティストにとってデリケートで  複雑なデータ。手作業ではミスが発生する。 ・手作業による作成 ・手作業による更新 ・Prefab詳細仕様の把握 ゲーム開発の場合、作成した3Dデータをゲーム用のデータにするというのは必ず存在する作業かと思います。 今回のプロジェクトでは、MayaからUntiyへデータを入出力し、最終的にPrefabを作るというのがアーティストのワークフローにありました。 ここには多くの手作業が存在しています。(データ出力&Prefab生成) この作業から手作業を排除するためにデータ入出力パイプラインを構築しました。 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

6 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
1-1 ヒアリング 現場の意見をもとに解決すべき課題を決める  * Maya)FBXを出力したらスグUnityに反映したい  * Maya)1つのシーンから複数のモーションを出力したい  * Unity)マテリアルにシェーダーなどを設定するのが手間  * Unity)ついでにスクリプトもPrefabへ付与して欲しい  * Unity)そもそもPrefabとは? 解決策の理想を共有して齟齬を減らす まずは現場の意見収集を行いました。 意見を元に実際どのような課題があるのかを引き出します。 そして、課題に対する理想と着地点を決めていきました。 理想とは、理想とする解決方法で、実現できるかはわからないが、こうなるとハッピーだよね。というものです。 理想を共有することで、対策の方向性とクオリティラインのブレを抑える事ができます。 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

7 1-2 理想的なゴール 検証や設計を行い実現可能な着地点を決める * Mayaから1クリックでUnityにデータを持っていける
1-2 理想的なゴール * Mayaから1クリックでUnityにデータを持っていける * Prefabは自動的に生成&更新される 検証や設計を行い実現可能な着地点を決める ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

8 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
1-3 データ入出力の全体像     Maya側のデータ  * Mesh  * Texture  * Animation     Unity側のデータ  * Mesh  * Texture  * AnimationClip ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

9 変更頻度と変更のしやすさを考慮して、何をどこで変更可能にするかを決定
1-3 データ入出力の全体像     Maya側のデータ  * Mesh  * Texture  * Animation     Unity側のデータ  * Mesh  * Texture  * AnimationClip  * Prefab  * Shader  * AnimatorController  * Components データによっては、使い慣れたMayaで設定したほうが効率がいいというようなデータもありました。 今回のパイプラインではこのデータを対象にパイプライン構築を行っていきました。 変更頻度と変更のしやすさを考慮して、何をどこで変更可能にするかを決定 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

10 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
1-4 データ出力の着地点 カスタムエクスポーターを実装  * MayaからUnityフォルダに直接FBXをエクスポート  * FBXエクスポート時にテクスチャもUnityへコピー  * Mayaデータ構造にルールを持たせ、Unity用のデータを出力    →GroupNode、CustomAttribute、NodePlugin、XML出力 Unity ROOT * MayaからUnityフォルダに直接FBXをエクスポート UnityはUnityフォルダ内へのデータ追加&変更を感知すると自動的にインポートしてくれます。 操作を最小限にしたいのでこの仕様を活用。 MayaからUnityへの出力パスが必要になる。 UnityとMayaのディレクトリ構造を近づける(フォルダ名や階層の深さ)。 さらにUnityとMayaの共通ルートフォルダを作ることで相対パス操作が出来るようにしました。 * FBXエクスポート時にテクスチャもUnityへコピー テクスチャデータも必要なのでFBXと同じタイミングで、 Mayaシーンが参照しているテクスチャをUniyへコピーしています。 * Mayaデータ構造にルールを持たせ、Unity用のデータを出力(GroupNode) グループノード名をUnityの設定項目とし、 グループノードの子供にメッシュを格納してもらう。 それによってメッシュデータとプロパティ情報を関連付け、Unity側で処理できるようにしました。 * Mayaデータ構造にルールを持たせ、Unity用のデータを出力(CustomAttribute) データ仕様が固まってくると、データ毎に使用するシェーダーもおおよそ決まってきます。 事前に設定できるということで、MayaマテリアルのカスタムアトリビュートへUnityシェーダー名を埋め込みました。 * Mayaデータ構造にルールを持たせ、Unity用のデータを出力(NodePlugin) エクスポーターでは、モーションをフレーム分割しています。 そのフレーム情報とモーション名を専用ノードを作成して格納しています。 * Mayaデータ構造にルールを持たせ、Unity用のデータを出力(XML出力) FBXで出力できないデータはXMLファイルに出力しています。 CustomAttribute、NodePluginなど。 Maya ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

11 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
1-5 Prefab生成の着地点 カスタムインポーターを実装:  * FBXインポート時にPrefab生成用のダイアログを表示  * Material生成、Shader設定、Texture設定  * Component付与、パラメーター設定  * AnimatorController付与、クリップ設定 反応 *.FBX * FBXインポート時にPrefab生成用のダイアログを表示 ダイアログ無しでPrefabを生成しても良かったのですが、下記の理由で表示しています。  ・FBXだけ試しに更新したい。Prefabは生成したくないというケースもあった。  ・バージョン管理を行っているため、意図的にPrefabを更新したという意識づけを行いたかった。 * Material生成、Shader設定、Texture設定 UnityデフォルトのFBXからマテリアルを生成する処理をOFFに。 Materialを自前コードで生成してShaderとTextureも設定。 ※生成にはMayaから出力したXML情報を利用。 ※ShaderはUnity側で後から変更する可能性が高いので、   Materialを新規生成するときにだけXML情報を利用しています。 * Component付与、パラメーター設定 データ仕様が決まると、付与するComponentと初期値が決まってくるのでコードで設定。 * AnimatorController付与、クリップ設定 キャラクタープレハブなどはControllerが必要になります。 事前にコントローラーのテンプレートを作成しておき、そこからPrefab毎のコントローラーを生成。 さらに、コントローラーのステート名に合致するClipを自動アサインしています。 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

12 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
1-6 完成したパイプラインの効果 アーティストから見たワークフロー:  1.Maya)エクスポーターを起動する  2.Maya)エクスポーターの出力ボタンを押す  3.Unity)ウィンドウをアクティブにする  4.Unity)自動表示されるPrefab生成ボタンを押す 4 Steps !! 理想的なゴールには到達できませんでしたが、 手作業を排除するという点では合格ラインではないかなと思います。 これで事例1.データ入出力パイプラインのお話は終わりです。 TAというと単発のツールを作るようなイメージもありますが、 今回のようにデータフローの全体を踏まえたパイプラインづくりも行うことが可能です。 1つ目の事例紹介は以上です ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

13 事例2.アーティストのためのJenkins
*LightBuild *負荷計測 LightBuild:  ライトや配置の調整で繰り返し発生。  自分のマシンでやりたくない作業。 ・分散ビルドが出来ない ・処理に時間がかかる ・他のUnity作業ができない 負荷計測:  最新ビルドでシーンのテクスチャ  使用量を把握したい。 ・手動でビルドしたくない ・手動で実機実行したくない ・チェックするのが手間 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

14 2-1 Jenkins & ChatOps システム構成
監視 通知 ジョブ呼出 実行 ChatOpsに関しては詳細を割愛、ざっくり言うと、 チャットを監視して事前に決めておいたメッセージが流れると他のシステムなどに何らかのアクションを起こす仕組み。 そして、その監視役をボットと呼びます。 Chatwork以外のソフトウェアは、全て1台の共有マシン上で稼働しています。 Jenkinsからの完了通知は、チャットメッセージに加えて、 テキスト音声読み上げも行っています。(EFD) 実機, Subversion, etc… ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

15 2-2 LightBuildの実例(ChatOps)
背景アーティストがチャットから命令 Jenkinsが反応してLightBuildを開始 LightBuildが完了すると通知がくる Unityにはコマンドライン引数で指定したStaticメソッドを実行する仕組みがあります。 それを利用して指定シーンをライトビルドしています。 自分のPCを使用せず、しかも職場以外の場所からでもライトビルドを実行、結果確認をすることが出来る。 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

16 2-3 負荷計測の実例(TextureSize)
真夜中にJenkinsが負荷計測を実行、 完了するとチャットに通知してくる。 過去3回分のテクスチャサイズを一覧化。 計測結果が色分けされて視覚的に見やすい。 負荷計測のジョブ:  SVN更新で最新ゲームデータを取得、  Unityでゲームデータをビルド、  ビルドを計測モードで実機実行、  計測モードだと各シーンのテクスチャサイズをCSV出力してくれる(グラフィックスプログラマーが作ってくれた)  計測が終わると、CSVをもとにHTMLを作成する。 継続的にテクスチャサイズ計測と改善ができる環境に。 2つ目の事例紹介は以上です ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

17 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
ご静聴ありがとうございました ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

18 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
Appendix Jenkinsプラグイン ChatWork Plugin(Chatwork通知用) Groovy Label Assignment plugin(Node指定でLabel指定用) Workflow plugin(複数ジョブの連続実行&一括制御) Unity3d plugin(Unity起動用) HTTP Request Plugin(hubotアクセス用) Rebuilder(リビルド実行用) プロジェクトで利用したプラグインになります。 Jenkinsの導入から設定、カスタマイズまで個人で行っています。 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.

19 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.
Appendix Jenkinsジョブ(一部) 特定ワークスペースのSVN更新を毎日Chatwork通知 Unity:全マップを調べ非アクティブなGameObjectを出力 Unity:全背景プレハブを調べTransformなどがおかしいデータを出力 Unity:全マップのHierarchy構造を出力(オブジェクト名、Prefab状態など) Unity:全マップを調べMissingなGameObjectを出力 Unity:全マップのProfiler情報を出力(オブジェクト数、メモリなど) Unity:全マップを調べ配置されているPrefabの種類と数を出力 Unity:全マップを調べ設定値がおかしいものを出力(FOGがONか?などの汎用チェック) Unity:全マップを調べStandardShaderを使用しているGameObjectを出力 Unity:全FBXを調べReadableになっているものを出力する Unity:全マップを調べマイナススケールなGameObjectを出力する Unity:全テクスチャを調べフォーマット情報を出力する(解像度、圧縮設定など) Unity:Prefabで使用されていないマテリアルを出力する 作成したジョブの一例です。 ©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.


Download ppt "Unityゲーム開発 パイプライン事例紹介"

Similar presentations


Ads by Google