---
title: 聖剣伝説３でのUE4利用事例の紹介~Making of Mana【UNREAL FEST EXTREME 2020 WINTER】
tags:  #ue4 #unreal fest #unreal fest extreme 2020 winter #ue-console #ue-rendering #ue-sequencer #ue-optimize  
author: [エピック ゲームズ ジャパン](https://www.docswell.com/user/EpicGamesJapan)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/Z5EGY254EL.jpg?width=480
description: UNREAL FEST EXTREME 2020 WINTER 再生リスト https://www.youtube.com/playlist?list=PLr_Cbd4sUDTzxG9a4TrU0Rg6-ApCJBCsI  講演内容： 「聖剣伝説３ TRIALS of MANA」にて、以下の事例においてUnreal Engine 4 をどのように使用したかを詳しく紹介させていただきます。 ・キャラクターの表現 ・シーケンサーを使ったイベントシーンの再生 ・その他エンジニア向けTIPS  講演者： 本告 禎一 ( 株式会社ジーン MOE事業部 プログラマー ) 滝下 直樹 ( 株式会社ジーン 第1開発事業部香川スタジオ室長 ) 植本 修平 ( 株式会社ジーン 3Dアーティスト )  https://unrealengine.jp/unrealfest/ #ue4fest
published: November 17, 20
canonical: https://www.docswell.com/s/EpicGamesJapan/ZDJ94Z-UE4_UFE20W_Xeen_Seiken3
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/Z5EGY254EL.jpg)

聖剣伝説３でのUE4利用事例の紹介
~Making of Mana~
株式会社ジーン
#ue4fest


# Page. 2

![Page Image](https://bcdn.docswell.com/page/W4EZK583E3.jpg)

お品書き
• アーティスト編(キャラクター)
• プログラム編(シーケンサーを利用したイベントシーン再生)
• プログラム編(開発で得た知見について)
#ue4fest


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GYE9KM4YE3.jpg)

聖剣伝説３でのUE4利用事例の紹介
～キャラクター編(ルックについて)～
株式会社ジーン
3Dアーティスト
植本修平
#ue4fest


# Page. 4

![Page Image](https://bcdn.docswell.com/page/NPEXVZLX7X.jpg)

目次
•
•
•
•
•
自己紹介
• ライティングについて
聖剣伝説3 Trials of Mana紹介 • 揺れものについて
はじめに(前置き)
アウトラインについて
シェーダーについて
#ue4fest


# Page. 5

![Page Image](https://bcdn.docswell.com/page/L2EVD199EQ.jpg)

自己紹介
• 案件役割
名前：植本 修平
役職：３Dアーティスト
•
•
•
•
•
•
•
•
•
プレイヤーキャラクターのモデリング。
モンスター、ボスモデリング。
背景についてアレコレ手段を労する
キャラマテリアル、背景の特殊表現マテリアル作成
ポスプロマテリアル作成、ポスプロ調整
キャラと背景とイベントをつなぐ人
各プラットフォームの描画設定、描画負荷を追っかける人
メニュー系画面(3D)、演出等
心の清涼剤、その他諸々
#ue4fest


# Page. 6

![Page Image](https://bcdn.docswell.com/page/8GEWPW9QJ2.jpg)

聖剣伝説3 Trials of Mana紹介
#ue4fest


# Page. 7

![Page Image](https://bcdn.docswell.com/page/2VEN8RD1J8.jpg)

聖剣伝説3 Trials of Mana紹介
• スクウェア・エニックス社のブランドである
聖剣伝説シリーズ３作目のリメイク作品
※以降、聖剣伝説3 ToMと表記
• 原作は1995年に
スクウェア社より発売された
スーパーファミコン用ソフトのRPG
https://www.jp.square-enix.com/seiken3_tom/
本スライドは株式会社スクウェア・エニックスが権利を有する著作物を利用しています。
当該コンテンツの転載・配布は禁止いたします。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 8

![Page Image](https://bcdn.docswell.com/page/54EM2M32EW.jpg)

はじめに(キャラクター編)
#ue4fest


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4LJ3P26975.jpg)

はじめに(キャラクター編)
• エンジンについては最終4.22.3を使用
• (グラフィック用には無改造)
• エンジン標準の機能のみで作成
#ue4fest


# Page. 10

![Page Image](https://bcdn.docswell.com/page/Z5JGY244JL.jpg)

はじめに(キャラクター編)
• UE4でどういった機能を使用したか、というお話がメイン
• 機能詳細や、技術的な内容はお話ししません
(甘口な内容ながら中辛をブレンドしたまろやかさ)
機能や、技術などの詳細については、
過去の登壇者様の講演内容や、
有志の方の記事やまとめが大変参考になります
#ue4fest


# Page. 11

![Page Image](https://bcdn.docswell.com/page/8G7WPW6QE2.jpg)

はじめに(ビジュアルについて)
• アナログ感を意識
原作のドット、イラスト。本作でのイラスト。三者三様の魅力的な要素。
それぞれ違った魅力の中でも共通項を考え、
ハンドメイド感(暖かみなど)を感じる画作りを意識
(便宜上、こちらを機械的ではない、という意味でアナログ感と表記)
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 12

![Page Image](https://bcdn.docswell.com/page/5DJY2KR6JM.jpg)

アウトラインについて
#ue4fest


# Page. 13

![Page Image](https://bcdn.docswell.com/page/MLJLKLRP7R.jpg)

アウトラインについて
ポストプロセスにてアウトラインを作成
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 14

![Page Image](https://bcdn.docswell.com/page/63JKQ8R9JD.jpg)

アウトラインについて
輪郭用の深度比較と、
ディテール用の法線比較、角度抽出を使用
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 15

![Page Image](https://bcdn.docswell.com/page/Z5EGY2M4EL.jpg)

アウトラインについて
アウトラインに強弱追加
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 16

![Page Image](https://bcdn.docswell.com/page/8GJWPWRQ72.jpg)

アウトラインについて
アウトラインに強弱追加
(WorldNormalを利用したマスクを参照)
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 17

![Page Image](https://bcdn.docswell.com/page/V9J2D5K5JR.jpg)

アウトラインについて
アウトラインに強弱追加(色味変更)
(WorldNormalを利用したマスクを参照)
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 18

![Page Image](https://bcdn.docswell.com/page/5GE8RLZKJD.jpg)

シェーディングについて
#ue4fest


# Page. 19

![Page Image](https://bcdn.docswell.com/page/NPEXVZYX7X.jpg)

シェーディング
• Non物理ベース
• 特徴的なスペキュラ、陰影はマテリアル内で表現
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 20

![Page Image](https://bcdn.docswell.com/page/L2EVD159EQ.jpg)

シェーディング(要素について)
ベース
陰1
陰2
リム
シャドウ
スペキュラ
#ue4fest


# Page. 21

![Page Image](https://bcdn.docswell.com/page/PLE136PLJG.jpg)

シェーディング(要素について)
• シェーディングの要素について
• ベースカラーのみ
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 22

![Page Image](https://bcdn.docswell.com/page/5GJ5RN4974.jpg)

シェーディング(要素について)
• シェーディングの要素について
• ベースカラー
• 陰1,2を追加
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 23

![Page Image](https://bcdn.docswell.com/page/L2JVD1PMJQ.jpg)

シェーディング(要素について)
• シェーディングの要素について
• ベースカラー
• 陰1,2
• リムライト追加
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 24

![Page Image](https://bcdn.docswell.com/page/PLJ136L47G.jpg)

シェーディング(要素について)
• シェーディングの要素について
•
•
•
•
ベースカラー
陰1,2
リムライト
シャドウ追加(ハーフランバート)
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 25

![Page Image](https://bcdn.docswell.com/page/5G75RNLQE4.jpg)

シェーディング(要素について)
• シェーディングの要素について
•
•
•
•
•
ベースカラー
陰1,2
リムライト
シャドウ(ハーフランバート)
スペキュラ追加
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 26

![Page Image](https://bcdn.docswell.com/page/54JM2MW5JW.jpg)

シェーディング(陰について)
リムの領域で陰をマスクすることで、地の色のままでリムライトを表現。
稜線の表現と、バックライトの表現で併用
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 27

![Page Image](https://bcdn.docswell.com/page/V87DLZN6EG.jpg)

シェーディング(テクスチャ)
ノーマルマップにタッチが出るようにフィルタをかけ、
シェーディング部分にアナログ感を持たせるように調整
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 28

![Page Image](https://bcdn.docswell.com/page/DKJ4VYPVE1.jpg)

ライティングについて
#ue4fest


# Page. 29

![Page Image](https://bcdn.docswell.com/page/5GJ5RNVQ74.jpg)

ライティング
原作の、
時間帯変化の再現のため、
ステーショナリーの
ディレクショナルライト、
スカイライトを使用
(他は基本スタティック)
ステージ毎に、
24時間分のアニメーション
カーブで調整。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 30

![Page Image](https://bcdn.docswell.com/page/ML7LKL61ER.jpg)

ライティング(メニュー画面)
レンダーターゲット(2D)は使わず、
3D上のものをそのままレンダリング
で使用。
開発当時のエイリアシングの問題や、
(ゲーム中はTemporalAAを使用)
処理負荷都合、高解像度で
テクスチャを準備できなかった、
などの理由のため
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 31

![Page Image](https://bcdn.docswell.com/page/637KQ8ZM7D.jpg)

ライティング(メニュー画面)
(当然ながら)そのまま使用してしまうと
ステージ上のライトが反映されてしまう問題
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 32

![Page Image](https://bcdn.docswell.com/page/L27VD1YM7Q.jpg)

ライティング(メニュー画面)
• ライティングチャンネルの変更で、
ステージのライトが
当たらないように変更
• ポストからGIをOFFにすることで、
ボリューメトリックライトの
影響を切る
• r.SkyLightingQualityコマンドで
スカイライトを制御
#ue4fest


# Page. 33

![Page Image](https://bcdn.docswell.com/page/PL7136X4EG.jpg)

ライティング(メニュー画面)
エミッシブのみ
AmbientCubeMap
AmbientCubeMapにてライティング
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 34

![Page Image](https://bcdn.docswell.com/page/V972D5XW7R.jpg)

揺れものについて
#ue4fest


# Page. 35

![Page Image](https://bcdn.docswell.com/page/MLJLKLV17R.jpg)

揺れものについて
• KawaiiPhysicsとAnimDynamicsを併用
#ue4fest


# Page. 36

![Page Image](https://bcdn.docswell.com/page/NPJXVZ91EX.jpg)

揺れものについて
• KawaiiPhysicsとは
• エピック ゲームズ ジャパンの猫
おかず様作成の非公式の疑似物理プラグイン
UnrealEngine4用に作成され、
髪、スカート、胸などの揺れものを
「かんたんに」「かわいく」
揺らすことができます。
https://github.com/pafuhana1213/KawaiiPhysics
#ue4fest


# Page. 37

![Page Image](https://bcdn.docswell.com/page/4V7P2DLZ78.jpg)

揺れものについて
• なぜKawaiiPhysicsを使用したのか
#ue4fest


# Page. 38

![Page Image](https://bcdn.docswell.com/page/V4JQMP357P.jpg)

なぜKawaiiPhysicsを使用したのか
「かんたんに」設定できて
「かわいく」揺らすことができるから
#ue4fest


# Page. 39

![Page Image](https://bcdn.docswell.com/page/W4EZK5ZLE3.jpg)

なぜKawaiiPhysicsを使用したのか
• 開発初期はPhysicsAssetを使用
処理が不安定な開発初期という事も有り、
コリジョン抜けや形状の伸び等、物理が荒ぶる挙動を確認
各プラットフォームで動作確認を行い、現時点での使用は難しいと判断
#ue4fest


# Page. 40

![Page Image](https://bcdn.docswell.com/page/2VJN8R9D78.jpg)

なぜKawaiiPhysicsを使用したのか
• 開発中盤、AnimDynamicsに置き換え
PhysicsAssetより挙動は安定するものの、
負荷が高い場面で、コリジョン抜け等見た目が破綻する事があった
納得のいく揺れ挙動に近づける為、試行錯誤を繰り返す
#ue4fest


# Page. 41

![Page Image](https://bcdn.docswell.com/page/54JM2MN5JW.jpg)

なぜKawaiiPhysicsを使用したのか
• 開発終盤、PhysicsAssetを再検証
処理負荷が安定してきた終盤
PhysicsAssetを再検証するも、高負荷時のコリジョン抜けや、
形状の延びが発生してしまう
AnimDynamicsからの置き換えるコストも高く、再び使用を断念
#ue4fest


# Page. 42

![Page Image](https://bcdn.docswell.com/page/4L73P242E5.jpg)

なぜKawaiiPhysicsを使用したのか
• Kawaiiとの邂逅
負荷が高い条件下でも安定しており、自然な揺れ挙動を実現できた
コリジョン抜けに強く、形状破綻が少なかった
既存のAnimDynamicsと併用する事ができ、置き換えコストも低い
快適かつ簡単操作で、プロジェクト終盤でも安定した作業が可能
#ue4fest


# Page. 43

![Page Image](https://bcdn.docswell.com/page/Z57GY2NX7L.jpg)

なぜKawaiiPhysicsを使用したのか
KawaiiPhysicsに感謝
#ue4fest


# Page. 44

![Page Image](https://bcdn.docswell.com/page/8GEWPW5ZJ2.jpg)

まとめ(キャラクター編)
#ue4fest


# Page. 45

![Page Image](https://bcdn.docswell.com/page/4LE3P2YZJ5.jpg)

まとめ(キャラクター編)
• 原作のキャラクターの魅力を再確認
少しでも伝えられるよう四苦八苦
• KawaiiPhysicsはかわいい
案件上の揺れものの問題が解決
#ue4fest


# Page. 46

![Page Image](https://bcdn.docswell.com/page/L2JVD16RJQ.jpg)

次、プログラム編です！
#ue4fest


# Page. 47

![Page Image](https://bcdn.docswell.com/page/DK74VYNPJ1.jpg)

シーケンサーを利用した
イベントシーン再生
株式会社ジーン
第一開発事業部
香川スタジオ
滝下 直樹
#ue4fest


# Page. 48

![Page Image](https://bcdn.docswell.com/page/W4EZK5NNE3.jpg)

アジェンダ
■聖剣伝説3 ToMのイベントシーンの作り方
■シーケンサーのイベント機能で実現した事
■目の向き、首の向きの制御
■パーティー構成に応じたカメラの切り替え
■リップシンク
#ue4fest


# Page. 49

![Page Image](https://bcdn.docswell.com/page/V9J2D55MJR.jpg)

聖剣伝説3 ToMの
イベントシーンの作り方
#ue4fest


# Page. 50

![Page Image](https://bcdn.docswell.com/page/5GE8RLLRJD.jpg)

聖剣伝説3 ToMのイベントシーンの作り方
• 聖剣伝説3は、6人のメインキャラクターから主人公、仲間１、仲間2を
選んだ組み合わせによって、ストーリーが複雑に変化します。
• この複雑なストーリーの全組み合わせをシーケンサーで一つずつ制作す
ることは現実的ではありません。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 51

![Page Image](https://bcdn.docswell.com/page/ZPJRMVV9E9.jpg)

• 例えば次のように、同じ場所で展開されるイベントシーンも、
キャラクターの組み合わせによって内容が異なります。
#ue4fest


# Page. 52

![Page Image](https://bcdn.docswell.com/page/4VJP2DDVJ8.jpg)

※本ページは動画ですが、資料からは再生できません。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 53

![Page Image](https://bcdn.docswell.com/page/V4EQMPP2JP.jpg)

• メインキャラクターはシーケンサーでは専用のActorで共通の
演技を作成し、ゲーム実行時にはゲーム中で表示しているメ
インキャラクターのActorに置き換えます。
• ゲーム中のパーティー構成が反映されます。
• ゲーム中の装備等が維持されます。
#ue4fest


# Page. 54

![Page Image](https://bcdn.docswell.com/page/W47ZK55N73.jpg)

• シーケンサーのスクリーンショット
#ue4fest


# Page. 55

![Page Image](https://bcdn.docswell.com/page/V9E2D58MER.jpg)

#ue4fest


# Page. 56

![Page Image](https://bcdn.docswell.com/page/GY79KMZW73.jpg)

• アニメーションのファイル名は全キャラクターで共通の命名則にします。
AM_pc01_01a_a_angry01_L.uasset
キャラID クラスID
アニメーション名
• イベントシーン再生開始時に、再生するシーケンサーをC++にて走査し
て、必要なアニメーション名を抽出します。
• 出演するキャラクターの同名アニメーションをロードして、シーケンサ
ーで指定されたアニメーション再生タイミングで全く同じアニメーショ
ンを再生します。
• 各キャラクターのアニメーションはコンバーターで自動収集してcsvを
作成し、データテーブル化しています。
#ue4fest


# Page. 57

![Page Image](https://bcdn.docswell.com/page/54EM2M19EW.jpg)

【聖剣伝説3 ToMのイベントシーンの作り方】
アニメーションのレイヤー
• アニメーションは、体、眉、目、口の4つのレイヤーをブレンド再生し
ています。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 58

![Page Image](https://bcdn.docswell.com/page/V8JDLZ647G.jpg)

シーケンサーの
イベント機能で実現した事
#ue4fest


# Page. 59

![Page Image](https://bcdn.docswell.com/page/Z5JGY286JL.jpg)

シーケンサーのイベントで実現した事
• シーケンサーで設定できるイベント（Payload型）で
実装したことをいくつか紹介いたします。
#ue4fest


# Page. 60

![Page Image](https://bcdn.docswell.com/page/PL7136NXEG.jpg)

【シーケンサーのイベントで実現した事】
セリフの表示
•
音声とリップシンクアニメ
ーションも連動しています。
パーティー番号０（主人公）が
どのキャラであれば
このテキストIDのセリフを
表示するというパラメータです。
#ue4fest


# Page. 61

![Page Image](https://bcdn.docswell.com/page/KYE6Q9V9EV.jpg)

【シーケンサーのイベントで実現した事】
タイムラインのコントロール
• 同じようなイベントでも、とあるパーティー構成時だけ再生するような
カットがあるため、条件設定して何番目のサブシーケンスにタイムライ
ンを進める、という事ができるようにしています。
#ue4fest


# Page. 62

![Page Image](https://bcdn.docswell.com/page/V972D8MM7R.jpg)

• 愛用していたPayload型イベントですが、開発途中のUE4.21へのアップ
デートの際に、非標準仕様になりました。
• 泣きました。
• でも、作成済みのシーケンサーからPayload型のイベントトラックをコ
ピペすることで、利用し続けました。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 63

![Page Image](https://bcdn.docswell.com/page/GYJ9KZ5WJ3.jpg)

目の向き、首の向きの制御
#ue4fest


# Page. 64

![Page Image](https://bcdn.docswell.com/page/547M21K97W.jpg)

目の向き、首の向きの調整
• 角度を直接指定する方法と、ターゲットを指定するLookAt 型の2つを用
意しました。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 65

![Page Image](https://bcdn.docswell.com/page/4LE3PMQZJ5.jpg)

• ただし、メインキャラはそれぞれ、眼球の大きさが違いますので、
可動限界角度を設定して実行時に抑制しています。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 66

![Page Image](https://bcdn.docswell.com/page/L2JVDGWRJQ.jpg)

パーティー構成に応じた
カメラの切り替え
#ue4fest


# Page. 67

![Page Image](https://bcdn.docswell.com/page/DK74VXRPJ1.jpg)

パーティー構成に応じたカメラの切り替え
• パーティーメンバーに応じて、一部のカメラを切り替えています。
（シャルロットがちびっこすぎる！！）
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 68

![Page Image](https://bcdn.docswell.com/page/W4EZK2QNE3.jpg)

• シーケンサーの中にメインキャラごとのカメラを用意しておき、実行時
にパーティー構成に応じてアクティブなカメラをバインドし直していま
す。
#ue4fest


# Page. 69

![Page Image](https://bcdn.docswell.com/page/V9J2D8NMJR.jpg)

// 変更したいカメラトラックを探す
FMovieSceneObjectBindingIDtargetBindingID;
for (int i = 0; i &lt; spawnableCnt; ++i)
{
const FMovieSceneSpawnable&amp; Spawnable = movieScene-&gt;GetSpawnable(i);
FString str = Spawnable.GetName();
if (str.StartsWith(findingName))
{
targetBindingID = FMovieSceneObjectBindingID(Spawnable.GetGuid(), MovieSceneSequenceID::Root, EMovieSceneObjectBindingSpace::Local);
isFound = true;
break;
}
}
if (isFound)
{
// CameraCutトラックのカメラを変更する
UMovieSceneTrack*camTrack = movieScene-&gt;GetCameraCutTrack();
if (camTrack != nullptr)
{
const TArray&lt;UMovieSceneSection *&gt;sections = camTrack-&gt;GetAllSections();
for (int i = 0; i &lt; sections.Num(); ++i)
{
UMovieSceneCameraCutSection*camSection = Cast&lt;UMovieSceneCameraCutSection&gt;(sections[i]);
if (camSection != nullptr) {
camSection-&gt;SetCameraBindingID(targetBindingID);
camSection-&gt;Modify();
camSection-&gt;MarkAsChanged();
}
}
}
}
•
https://udn.unrealengine.com/s/question/0D52L00004luxKpSAI
#ue4fest


# Page. 70

![Page Image](https://bcdn.docswell.com/page/GYE9KZYWE3.jpg)

リップシンク
#ue4fest


# Page. 71

![Page Image](https://bcdn.docswell.com/page/54JM21Z9JW.jpg)

リップシンク対応
• 音声は日本語と英語を用意しており、それぞれにリップシン
ク対応しています。
#ue4fest


# Page. 72

![Page Image](https://bcdn.docswell.com/page/63EKQVGNED.jpg)

※本ページは動画ですが、資料からは再生できません。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 73

![Page Image](https://bcdn.docswell.com/page/4VJP2Y9VJ8.jpg)

【リップシンク対応】
実装方法
• セリフのテキストIDと音声ファイル名は一致させるルール。
• スクウェア・エニックス様のテキスト管理システムByblosで
は、セリフに対して発話者名も設定されている。
• Byblosについては、2017年のCEDECで紹介されています。
•
•
CEDEC Digital Library
https://cedil.cesa.or.jp/cedil_sessions/view/1742
Social Game Info 記事
https://gamebiz.jp/?p=192461
#ue4fest


# Page. 74

![Page Image](https://bcdn.docswell.com/page/V4EQM9X2JP.jpg)

【リップシンク対応】
実装方法
• 音声データをOculusのリップシンクライブラリを使って、口
のアニメーションをレコーディング。
（参考記事）
https://pafuhana1213.hatenablog.com/entry/2018/11/26/011057
• 再生からレコーディング、アセット保存までを自動化。
（全コンバートでだいたい一晩・・・）
• 必要があればデザイナーが手作業でアニメーションを微調整。
#ue4fest


# Page. 75

![Page Image](https://bcdn.docswell.com/page/8GEWP4LKJ2.jpg)

【リップシンク対応】
実装方法
• 作成されたリップシンクアニメーションは、コンバーターで収集して
csvを作成し、データテーブル化。
#ue4fest


# Page. 76

![Page Image](https://bcdn.docswell.com/page/5GJ5RD5D74.jpg)

【リップシンク対応】
実装方法
• イベントシーン再生時に、テキスト表示コマンドの発動に連動
させて・・・
• 同名の音声を再生
• そのテキストに設定された発話者名に対応するActorに、リップシンク
アニメーションを再生。
（Byblosに発話者名の設定があって本当に良かった！）
• ただし、モデルデータに名前が紐づかないようなモブキャラの場合だけは、どの
Actorにリップシンクアニメーションを再生するか個別に指定しています。
#ue4fest


# Page. 77

![Page Image](https://bcdn.docswell.com/page/V8EDL6DWJG.jpg)

以上です。
• 弊社ブログに、シーケンサーでのイベントシーン制作のヒュー
マンエラーの例と、その検出方法について紹介しています。
• https://www.xeen.co.jp/staffblog/2020/02/blog-20200218.html
• ご清聴ありがとうございます。
#ue4fest


# Page. 78

![Page Image](https://bcdn.docswell.com/page/L2JVDGL3JQ.jpg)

開発で得た知見について
株式会社ジーン
MOE事業部
本告 禎一
#ue4fest


# Page. 79

![Page Image](https://bcdn.docswell.com/page/V4JQM9867P.jpg)

アジェンダ
■開発環境について
■最も苦労した点/解決への道のり
■事前に確認/設定しておくべき項目
■まとめ
■最後に
#ue4fest


# Page. 80

![Page Image](https://bcdn.docswell.com/page/8GJWP43172.jpg)

開発環境について
• UE4.18で開発スタート。３回のアップデートを経て最終バージョンは
4.22。
• エンジンについては、CLマージを加味してプログラマセクション用に
ソースコードを用意。それ以外のセクションではビルドを済ませた
バイナリバージョンで開発。
• C++での開発実績は多いものの、UE４での大規模開発実績はほぼ0
#ue4fest


# Page. 81

![Page Image](https://bcdn.docswell.com/page/5G75RDYPE4.jpg)

• BPとは？/リソースの扱いについて/各プラットフォームへの対応
Etc...
大丈夫かなぁ…
#ue4fest


# Page. 82

![Page Image](https://bcdn.docswell.com/page/5DEY26VNEM.jpg)

意外となんとかなる
• 確認したいリソースをレベルに放り込むだけで簡単に確認する事が出来る！
→各セクション側だけでも独立して検証出来てしまうので
単体テストが凄くラク！
他にもイベント単体確認デバッグ
レベルや、エフェクト確認レベル
等様々なデバッグ用レベルを用意
しました。
バトル確認用デバッグレベル
サウンド確認用デバッグレベル
• あとは量産、結合するだけ！
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 83

![Page Image](https://bcdn.docswell.com/page/MLELKQZVJR.jpg)

と、思いますよね？
#ue4fest


# Page. 84

![Page Image](https://bcdn.docswell.com/page/ZPJRML24E9.jpg)

最も苦労した点
開発も中盤に差し掛かる頃、同時に進行していたとある展示イベントに向
けたROMの確認中、頻繁にクラッシュする問題が発生。
その他にも・・・
#ue4fest


# Page. 85

![Page Image](https://bcdn.docswell.com/page/4L73PMRQE5.jpg)

最も苦労した点
開発も中盤に差し掛かる頃、同時に進行していたとある展示イベントに向
けたROMの確認中、頻繁にクラッシュする問題が発生。
その他にも・・・
• ロードが長すぎる！(トータルで１分半以上)
#ue4fest


# Page. 86

![Page Image](https://bcdn.docswell.com/page/L2EVDG33EQ.jpg)

最も苦労した点
開発も中盤に差し掛かる頃、同時に進行していたとある展示イベントに向
けたROMの確認中、頻繁にクラッシュする問題が発生。
その他にも・・・
• ロードが長すぎる！(トータルで１分半以上)
• ゲーム中の処理落ちが酷い！
#ue4fest


# Page. 87

![Page Image](https://bcdn.docswell.com/page/8GEWP4D1J2.jpg)

最も苦労した点
開発も中盤に差し掛かる頃、同時に進行していたとある展示イベントに向
けたROMの確認中、頻繁にクラッシュする問題が発生。
その他にも・・・
• ロードが長すぎる！(トータルで１分半以上)
• ゲーム中の処理落ちが酷い！
• ○○を××するとバグる！
#ue4fest


# Page. 88

![Page Image](https://bcdn.docswell.com/page/5GJ5RDGP74.jpg)

最も苦労した点
開発も中盤に差し掛かる頃、同時に進行していたとある展示イベントに向
けたROMの確認中、頻繁にクラッシュする問題が発生。
その他にも・・・
• ロードが長すぎる！(トータルで１分半以上)
• ゲーム中の処理落ちが酷い！
• ○○を××するとバグる！
等々、様々な問題が指摘され始めました。
#ue4fest


# Page. 89

![Page Image](https://bcdn.docswell.com/page/5D7Y26GN7M.jpg)

単純なバグは修正するとして・・・
• クラッシュは街中を歩いているだけでも発生してしまう
• 全体的に重いが、戦闘中特に重かった
• 展示用ROMの規模から考えてもロード時間が想定以上にかかっている
そこで・・・
２～３名のプロファイルチームを組み、負荷プロファイルを開始。
同時にEPIC様にも状況を説明し、ヘルプを要請させて頂きました。
#ue4fest


# Page. 90

![Page Image](https://bcdn.docswell.com/page/ML7LKQPVER.jpg)

ある日、プロファイルチームのメンバーから検証結果報告が入りました。
話を聞いてみると・・・
街中でクラッシュする
原因が分かりました。
お、マジで？
#ue4fest


# Page. 91

![Page Image](https://bcdn.docswell.com/page/NP7XVWPZJX.jpg)

ある日、プロファイルチームのメンバーから検証結果報告が入りました。
話を聞いてみると・・・
ジャドに
カニがいます。
なんで！？
#ue4fest


# Page. 92

![Page Image](https://bcdn.docswell.com/page/L27VDGD37Q.jpg)

原因を深掘りしていくと・・・
•
GameInstance、PlayerController で大量にハード参照で紐づいている
→Assetが各リソースをハード参照している
ハード参照で紐づくことによって要らないものにまでメモリが使用されて
いる状態となっていた。
•
•
ロード時間が長い
＝不必要なリソースにロード時間が取られていた
クラッシュしてしまう＝不必要なリソースにメモリが利用され、メモリ不足を引き起こしていた
つまり、
今回起きている問題の大部分はこれが占めてる可能性が極めて高い。
#ue4fest


# Page. 93

![Page Image](https://bcdn.docswell.com/page/DKE4VXVM71.jpg)

リファレンスビューアにてGameInstanceを覗いてみた。
2.6GBのサイズ
さらに参照を追っていくと…
100以上の紐づ
き
ゲーム起動時にすでに
ボスのスケルタルメッシュを読み込んでいると発覚。
このようなAssetの紐づきによってメモリを圧迫している。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 94

![Page Image](https://bcdn.docswell.com/page/KYE6QVQPEV.jpg)

解決への道のり
１：Assetのハード参照をソフト参照へ。
２：各アクセスをインターフェース経由で行うように。
３：BPをC++化させる
更に・・・
#ue4fest


# Page. 95

![Page Image](https://bcdn.docswell.com/page/2V7N8Z8VE8.jpg)

解決への道のり
１：Assetのハード参照をソフト参照へ。
２：各アクセスをインターフェース経由で行うように。
３：BPをC++化させる
更に・・・
EPIC様から精鋭チームが派遣され、
プロファイリングして頂ける事に！
#ue4fest


# Page. 96

![Page Image](https://bcdn.docswell.com/page/4LE3PMKQJ5.jpg)

Assetのハード参照をソフト参照へ
• データテーブル、Actorに対しての
Assetをハード参照からソフト参照へ変更
しかし、ここで問題が発生。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 97

![Page Image](https://bcdn.docswell.com/page/Z5EGY8VYEL.jpg)

Assetのハード参照をソフト参照へ
• データテーブル、Actorに対しての
Assetをハード参照からソフト参照へ変更
しかし、ここで問題が発生。
各ActorのBeginPlayなどで管理マネージャーにアクセス
↓
管理マネージャー生成されてなければ生成、となり、
どのActorがどのタイミングアクセスしてくるか順不同。
とても読み込みのフローを担保できる状況ではなかった。
初期化フローをすべて一から作成しなおしました。
© SQUARE ENIX CO., LTD. All Rights Reserved.
#ue4fest


# Page. 98

![Page Image](https://bcdn.docswell.com/page/W4EZK26XE3.jpg)

各アクセスをインターフェース経由で行うように
• 外部へのアクセスを基底型でインターフェースを使用して
アクセスする事によって、参照が紐づかないように対応。
BPをC++化させる
• ブループリントの機能をC++化させる。
ただし、ゲーム内の実装が9割ほどBPで作成されている為、
リスクとコストがかかり過ぎると判断した。
効果的なものを抜粋し、一部対応で留めました。
#ue4fest


# Page. 99

![Page Image](https://bcdn.docswell.com/page/5DEY26MNEM.jpg)

その他の対応(事前に確認/設定しておくべき項目)
【ロード時間短縮に効果的な対応】
• プレイヤー系の常駐、エフェクト類の常駐、SE類の常駐処理対応
• ウィジェット類/アイコンテクスチャをキャッシュして利用するように対応
• 独立性の高さ故、各作業者間のテスト用データ(グラフィックデータ等も含
む)が散らかっていたので整理した
→事前にセクション間で明確なルールを決め、遵守する。
無駄なリソースデータはROMの容量にも影響するので可能な限り徹底しておく。
#ue4fest


# Page. 100

![Page Image](https://bcdn.docswell.com/page/MLELKQ2VJR.jpg)

その他の対応(事前に確認/設定しておくべき項目)
【 CPUパフォーマンス改善に効果的な対応】
• Tickを可能な限りDisableへ設定する
→プロジェクト作成時に一括でDisableへ設定し、必要なActorのみEnableにするのが望ましい。
→複雑な処理はやはりC++側で処理した方が速い。
• PGO(Profile Guided Optimization)の利用
→ゲーム中のプロファイル結果を基にした最適化機能。
• URO (Enable Update Rate Optimizations)を有効に
→カメラから離れたキャラのアニメーション更新頻度を落とすことで負荷を削減出来る設定。
#ue4fest


# Page. 101

![Page Image](https://bcdn.docswell.com/page/4L73PM1QE5.jpg)

まとめ
• 本作で遭遇した問題の殆どは過去、先人達の通ってきた道
#ue4fest


# Page. 102

![Page Image](https://bcdn.docswell.com/page/Z57GY8RY7L.jpg)

まとめ
• 本作で遭遇した問題の殆どは過去、先人達の通ってきた道
→フォーラムを活用しましょう！必ず助けてくれます！
#ue4fest


# Page. 103

![Page Image](https://bcdn.docswell.com/page/8GEWP4Z1J2.jpg)

まとめ
• 本作で遭遇した問題の殆どは過去、先人達の通ってきた道
→フォーラムを活用しましょう！必ず助けてくれます！
→過去の講演資料に目を通しておきましょう！
https://www.slideshare.net/EpicGamesJapan
#ue4fest


# Page. 104

![Page Image](https://bcdn.docswell.com/page/4LE3PM16J5.jpg)

まとめ
• 本作で遭遇した問題の殆どは過去、先人達の通ってきた道
→フォーラムを活用しましょう！必ず助けてくれます！
→過去の講演資料に目を通しておきましょう！
https://www.slideshare.net/EpicGamesJapan
ごめんネ. . .
先人達の言う事はちゃんと聞きましょう！
#ue4fest


# Page. 105

![Page Image](https://bcdn.docswell.com/page/Z5EGY8RQEL.jpg)

おまけ
• リリース直前に初回起動時にハングアップする問題が発生！
→問題としては単純な実装ミス
• 徹夜でフラフラになりながらも、メンバーが協力してくれ、
更にスクウェア・エニックス様にも問題解決に尽力頂きまし
た！
#ue4fest


# Page. 106

![Page Image](https://bcdn.docswell.com/page/W4EZK212E3.jpg)

おまけ
• リリース直前に初回起動時にハングアップする問題が発生！
→問題としては単純な実装ミス
• 徹夜でフラフラになりながらも、メンバーが協力してくれ、
更にスクウェア・エニックス様にも問題解決に尽力頂きまし
た！
#ue4fest


# Page. 107

![Page Image](https://bcdn.docswell.com/page/2VJN8ZY878.jpg)

最後に
• 弊社では本作以外にも、コンシューマ/アーケード/スマホ等
様々なプラットフォームに対応した
ゲーム開発実績があります！
• お仕事の相談は是非ジーンへ！
ご清聴誠にありがとうございました！
#ue4fest


