リッチ表現なのに軽い!Unreal Engineだから実現できたHMIデモ最適化7選 | Unreal Fest Tokyo 2025

846 Views

December 08, 25

スライド概要

本講演へのアンケートにご協力をお願い致します:
https://forms.gle/GtjXZZpDbkDLxXTy5

講演動画:
https://youtu.be/98MN8_BbJA8

講演内容:自動車業界向けコンテンツを10年以上制作してきた弊社は、この夏「リッチ表現×軽量動作」をコンセプトにした技術デモ「historia HMI Realize」を発表しました。5年前のAndroid端末でCPU15%・60fpsを実現。本セッションでは最適化術を深掘りし、Unreal Engineならではの7つの手法を解説。HMIに限らずモバイル開発全般に役立つ知見とコンセプト設計の裏側も紹介します。



講演者:
佐々木 瞬(株式会社ヒストリア)
真茅 健一(株式会社ヒストリア)
星野 智希(株式会社ヒストリア)

株式会社ヒストリアについてはこちら:
https://historia.co.jp/ 

Unreal Fest Tokyo 2025公式サイト:
https://www.unrealengine.com/ja/events/unreal-fest-tokyo-2025

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

リッチなのに軽い! Unreal Engineだから実現できたHMIデモ最適化7選 ヒストリア・エンタープライズ 佐々木瞬 / 真茅健一 / 星野智希 #unrealfest

2.

自己紹介 株式会社ヒストリア 佐々木 瞬 代表取締役 プロデューサー / ディレクター / エンジニア ゲーム系の専門学校を企画職として卒業。 その後、ゲームのディレクターを経て、エンジニアへ 転身。前職でUnreal Engine 3 を使用していた経験か ら、2013年 Unreal Engine 専門会社のヒストリアを 設立。ゲームとエンタープライズコンテンツの両方の 制作を行う。 本作では、企画・ディレクションを担当。 Unreal Engine 歴 14年くらい。 2 #unrealfest

3.

自己紹介 株式会社ヒストリア 真茅 健一 3Dアーティスト ヒストリア・エンタープライズチーム所属の 3Dアーティスト。自動車、建築などノンゲー ムコンテンツのアートワークを担当。フォト リアル系の案件を担当することが多い。 本講演デモではコンテンツ全体のビジュアル 設計と最適化を担当。 #unrealfest

4.

自己紹介 株式会社ヒストリア 星野 智希 エンジニア 2022年にヒストリア・エンタープライズチームに 新卒入社。 学生時代には同社開催のゲームコンテスト「UE4 ぷちコン」へ応募。第12回~15回に入賞する。 現在は自動車業界、建築業界などに向けたアプリ ケーション開発を行っており、本講演デモでは各 種機能実装と、UI実装を担当。 #unrealfest

5.

ヒストリアの事業 開発者 コミュニティ ゲーム事業 エンタープライズ事業 ・家庭用ゲーム ・アーケードゲーム ・VR ・自動車業界 ・建築業界 ・放送/映像業界 ・その他業界 ・UE技術ブログ ・UEぷちコン ・セミナーイベント ・ゲームメーカーズ #unrealfest

6.

#unrealfest

7.

日本で唯一、コンソール系ゲーム開発会社で 自動車業界にコミットしている企業(たぶん) 10年以上自動車業界の案件は途切れていない #unrealfest

8.

エンタープライズ案件数 #unrealfest

9.

エンタープライズ案件数 自動車業界案件 累計受注数100件超えました! 2年連続ゴールドステータス #unrealfest

10.

リッチ表現 × 最適化 #unrealfest

11.

historia HMI Realize デモ端末 2020年8月発売, Samsung Galaxy Tab S7 #unrealfest

12.

historia HMI Realize https://historia.co.jp/enterprise/realize/ #unrealfest

13.

Stats (Open GL) デモ端末 フレームレート Samsung Galaxy Tab S7 Snapdragon 865+ ( 2020年8月発売 ) CPU使用率 GPU使用率 8/5 Build: Tokyo'25 for Automotiveでの発表時 #unrealfest

14.

Stats (Open GL) デモ端末 フレームレート Samsung Galaxy Tab S7 Snapdragon 865+ ( 2020年8月発売 ) CPU使用率 15%⇒ GPU使用率 55%⇒ #unrealfest

15.

Unreal Engineが得意なこと × UEは重い ○ UEはリッチ表現が軽く実現できる #unrealfest

16.

なぜペンギンを入れた? #unrealfest

17.

#unrealfest

18.

まあ入ってくるでしょう #unrealfest

19.

AIが進化する中で、UEはいま必要な技術? #unrealfest

20.

Unreal Engine VS AI #unrealfest

21.

利点と欠点 ゲームエンジン AI 利点 ・意図したコンテンツを表示可能 ・多彩な反応を返すことが可能 欠点 ・多彩な反応を用意するのに 工数がかかる ・事前準備した反応しか 得られない ・意図しないグラフィック表示、 意図しない操作をしてしまう ・デバッグがやりきれない #unrealfest

22.

UE / AI:境界線はどこだ 対話の返答 機能の操作リクエスト 対話エージェントが 提案する可能性 機能の実行 ユーザーとのインターフェース レンダリング・操作レスポンス より最適化技術は重要に! おそらくしばらく ココが境界 #unrealfest

23.

声だけで脱出ゲーム ChatGPT×UE5技術デモ 2023年6月 「名探偵モカと密室脱出」 https://historia.co.jp/archives/35650/ #unrealfest

24.

チーム構成 佐々木 Director 小林 PM 櫻井 UI Artist 吉野 UI Artist 真茅 3D Artist 星野 Engineer <制作期間> 約3か月+追加最適化1か月 #unrealfest

25.

最適化の例7選をご紹介 #unrealfest

26.

前提条件 ● フォワードレンダリングを採用 #unrealfest

27.

1.ライティングはベイク #unrealfest

28.

ライティング手法の検討 ● 本講演デモでは低負荷かつリッチな表現を目指した ● 背景の建築は大量のライトと高品質のグローバルイルミネーションが必要 #unrealfest

29.

ムーバブルのライトでライティングすると ● 間接光の表現ができない ● 多数のライトはパフォーマンス的に厳しい #unrealfest

30.

ライティングはベイク ● 動くものは車以外ないので、クオリティとパフォーマンス両方の観点からライ トは基本的にスタティックを使ってライティングをベイクする ● ベイクしておくことで低負荷で高品質なライティングを実現 #unrealfest

31.

ライティングはベイクなら ● スタティックのライトを負荷をほぼ気にせずたくさん置ける #unrealfest

32.

動的ライトの使用は最低限に ● 一つの動的ライトでもパフォーマンスに大きく影響する ● 太陽と車のヘッドライトのみ動的にライティング #unrealfest

33.

ライティング環境の切り替えはライトシナリオを使用 ● 各時間帯、天候のバリエーションのライティングはライトシナリオとしてライ トビルドしておいた。 ● 実行時には切り替えて読み込む #unrealfest

34.

2. デカール(or半透明の板)で影の表現 #unrealfest

35.

デカールについて ● 上書きして質感を投影することができる #unrealfest

36.

デカールなし #unrealfest

37.

デカールで影表現 ● モバイル環境では表現しきれない詳細な影をデカールで表現 #unrealfest

38.

車の下の影 ● 車の下の影のコントラストが足りない ● DCCツールで作成した床面のAOテクスチャを投影して影を追加 #unrealfest

39.

風に揺られる木の影の表現 ● 手前にボリュームのある植物を足したいがパフォーマンス的に厳しい ● せめて木があることを感じさせるために木の影だけを追加 ● UVにノイズを加えてアニメーションさせることで風で揺れているように見せた #unrealfest

40.

デカールの代わりに半透明の板で同じ表現を試すと ● デカールは使いやすく表現としては満足できたが軽くはない ● “Translucent”で”Unlit”な半透明マテリアルをただの板ポリに貼ってみた #unrealfest

41.

デモではデカールより半透明の板を置いた方が軽かった ● デカール 12.75ms ● 半透明の板 12.02ms #unrealfest

42.

3.ボディのディティールはAOで #unrealfest

43.

車のモデル ● ボディ全体で約8万トライアングル ● 車の形状のディティールが大切なのでモバイルとしてはリッチなポリゴン数 #unrealfest

44.

最終的なライティング #unrealfest

45.

普通にライティングするとディティールが出ない ● 奥まった部分の光が遮蔽できていない ドアハンドルの陰影がない パーティングラインが消える 本来光が回らない場所まで 明るくなっている #unrealfest

46.

遮蔽できていない光はどれ? ● 最終絵は動的ライト+ベイクしたライトマップでライティングでできている = + 動的ライト ライトマップ 最終絵 #unrealfest

47.

遮蔽できていない光はどれ? ● ライトマップの成分 = + ライトマップ #unrealfest

48.

マテリアルにAOを設定 ● ライトマップをマスクできる + ライトマップ x = 最終絵 動的ライト AOテクスチャ #unrealfest

49.

車のマテリアルにAOを設定 Substance PainterでベイクしたAO #unrealfest

50.

AOの強弱で遮蔽感を調整 #unrealfest

51.

環境光成分以外には効かない ● 動的ライトが当たっている面にはあまり効果がない(リフレクションキャプチャによる反射はマスクされる) ● ムーバブルのスカイライトには有効 #unrealfest

52.

4. タイヤをマテリアルで回転させる #unrealfest

53.

タイヤの回転はマテリアルで表現 ● CPUの計算を減らしGPUで軽量に計算するためマテリアルで回転させている ● マテリアルパラメーターコレクションで管理 #unrealfest

54.

準備としてメッシュをローポリ化とマテリアルの統合 ● 元のモデルは68万トライアングル、マテリアルが3つ #unrealfest

55.

ローポリを作成 ● カメラから見てシルエットに悪影響を与えない程度のローポリを作成 元のモデル ローポリモデル #unrealfest

56.

Substance Painterでローポリにベイク ● 元のモデルの情報をローポリにベイクして、質感とともにテクスチャ化 #unrealfest

57.

ポリゴン数、マテリアル数を削減 ほぼ同じ見た目でポリゴン数を大きく削減(隙間は背面が見えないように意図的に潰している) ・元のモデル ・ローポリにベイクしたモデル 68万トライアングル マテリアル3つ 840トライアングル マテリアル1つ #unrealfest

58.

マテリアル内でタイヤの回転を表現 ● マテリアルのRotate About AxisをWorld Position Offsetに接続して回転 ● 頂点の位置をマテリアルで回転させることでタイヤが回っているように見せている RotateAboutAxisについては弊社ブログ記事でも解説しています [UE4] RotateAboutAxisでオブジェクトを回転する https://historia.co.jp/archives/6261/ #unrealfest

59.

背景も連動して動くように ● 背景もタイヤの回転と連動してマテリアルで頂点を移動させた ● 実際には車は移動していないのでループ走行させるには管理しやすい #unrealfest

60.

5.Drawを減らす #unrealfest

61.

制作途中の背景と最終的な背景を比較 ● 制作途中 ● 最終 ほとんど同じに見えるが #unrealfest

62.

制作途中の背景と最終的な背景を比較 ● 制作途中 ● 最終 Drawsが大きく異なり、GPUの負荷にもつながっている #unrealfest

63.

制作途中の背景と最終的な背景を比較 ● 制作途中 ● 最終 “Stat scenerendering“で確認するとMesh draw callsが4倍近く #unrealfest

64.

制作途中の背景 ● 同じメッシュや小さいメッシュが小さい範囲を何度も分けて描画している #unrealfest

65.

最終的な背景 ● 同じメッシュや小さいメッシュをマージすることで効率的に描画している #unrealfest

66.

メッシュをマージする ● メッシュを複数選択して”Tool”→”Merge Actor”を選択 #unrealfest

67.

メッシュをマージする ● “Merge Actors”を押すとメッシュが結合される #unrealfest

68.

メッシュをマージする ● メッシュが結合されたので11回の描画が7回に (メッシュが1つでもマテリアルが7つに分かれているので) #unrealfest

69.

マテリアルもマージする場合は ● LOD Selection Typeを “Use specific LOD level”にすることで”Merge Materials”が使える。 #unrealfest

70.

メッシュをマージする ● マテリアルもマージされたので11回の描画が1回で済むようになった #unrealfest

71.

車もマテリアルをまとめてDrawを減らす ● 16あったマテリアルを3つに統合 #unrealfest

72.

まとめてテクスチャ化 ● Substance Painterで複数マテリアルをまとめてテクスチャ化した。 ● 前述のAOのベイクも行っているので遮蔽感の向上にも寄与 #unrealfest

73.

エンジニア編 #unrealfest

74.

6. 3DWidgetのサイズについて #unrealfest

75.

3DWidgetの描画 ● 3DのUIの描画WidgetComponentを使用 ● 2Dで作成したUIをそのまま3D空間に描画することができる #unrealfest

76.

WidgetComponentの描画 ● 3D空間に描画される前に一度内部でRenderTargetに描画される ● その後、Widgetを描画したRenderTargetが3D空間に表示される ● RenderTarget の解像度はDrawSizeで設定した数値 → Widget → RenderTargetに描画 3D空間に描画 #unrealfest

77.

WidgetComponentの解像度 ● 画面の解像度とは関係なく、内部では常にDrawSizeで設定した解像度で レンダリングされる ● 通常のテクスチャとは異なりMipMapが生成されないため、必要以上に 大きい解像度に設定されていると大きな負荷につながるため注意 #unrealfest

78.

今回の事例 ● Draw at Desired Sizeにチェックが入っていると自動で サイズが決定される ● 元のテクスチャが大きかったため、最終的な画面の解像度の 3倍以上の解像度でレンダリングされていた ● コンソール変数(MaximumRenderTarget)で最大サイズを 設定できるが、あくまでもエディター上で設定できる最大の サイズなので、 Draw at Desired Sizeが有効だと設定した数 値を超えることもある #unrealfest

79.

Widgetの解像度が大きい場合 ● 実際にGPUの負荷になっている様子 ↑4500x1200のWidget #unrealfest

80.

Widgetの解像度を小さくした場合 ● 解像度を1/4に下げた様子 → 1125x300 ● もともと画面の解像度より大きかったため、あまりぼやけた感じはしない #unrealfest

81.

適切な解像度 ● 必要以上に解像度を下げても効果は少ない ● 描画される大きさを考慮して適切なサイズに設定 フル解像度:46% 1/2:39% 1/4:39% #unrealfest

82.

最終的な解像度の設定 ● 元のテクスチャはそのままでWidgetComponentのDrawSizeを半分に設定、 全体のGPU使用率は46%->39%に削減 ● テクスチャはMipMapが作られて自動で適切なサイズになる、という先入観 があり開発終盤まで気づかなかった #unrealfest

83.

7. CPUの負荷について #unrealfest

84.

CPU負荷 ● アプリケーションのCPUの負荷はシステム全体の12%~20%ほど ● イベントドリブンで設計 ● ゲームスレッドも比較的余裕がある ● 今回特にゲームスレッド側での最適化は行っていない #unrealfest

85.

CPU負荷の内訳 ● ほとんどIdleTime ● そもそも実行している処理自体が少なく、最適化の余地があまりなかった #unrealfest

86.

不要なHitTestは行わない ● Widgetで当たり判定を取る必要のないものはVisibilityをNotHit-Testableに 設定 #unrealfest

87.

Tickについて ● TickはADASの他車両の制御でのみ使用 ● Homeと比べて負荷は増える(Home:12% -> ADAS:17%) ● Tickを使ったから重いという訳でななく、単純に処理する内容が増えたから ● 不必要なTickは避けるべきだが、必要があれば普通に使う #unrealfest

88.

ASISについて #unrealfest

89.

Android Single Instance Service(ASIS) https://www.unrealengine.com/ja/uses/hmi #unrealfest

90.

ASISを使ったアプリの構成の違い ● ネイティブアプリ(ASIS)を上でアプリを動作 通常の構成 ASISを使用した構成例 #unrealfest

91.

通常の構成では ● UEだけで完結 ● プロトタイプなど小規模な開発に向いている ● 車両と連携する処理を組み込む難易度が高い 通常の構成 #unrealfest

92.

ASISを使用する場合 ● ASISアプリとUEアプリを別々に開発できる ● ASIS UE間は双方向で通信が可能 ● 車両との連携など安全に関わる部分はASISアプ リ側に委ねられる ● 構成が複雑になるため小規模開発には向かない ASISを使用した構成例 #unrealfest

93.

クラッシュに強い ● ASISを使用していない場合 ● Debug Crashを実行 クラッシュを実行 アプリ全体が落ちる ホーム画面 #unrealfest

94.

クラッシュに強い ● ASISを有効にするとクラッシュしてもアプリ本体に影響がない クラッシュを実行 ASISは生きたまま すぐに再起動 #unrealfest

95.

アプリの切り替え ● 非常に高速に切り替えが可能 ● 遷移アニメーションなども作れる #unrealfest

96.

AndroidのUIが利用できる ● ASISアプリのUIをUEの画面に重ねることができるため、UIをUEに組み込む コストを削減 → Android StudioでUIを作成 → TextureViewとしてUEの画面を扱える UIを重ねて表示 #unrealfest

97.

ASISのパフォーマンス ● オーバーヘッドは若干あるが(1ms程)ほぼ無視できる ● アプリケーション全体のCPU負荷はUEアプリ+ASISアプリなので少 し増える(数%程)がこちらもほぼ無視できる ● メモリの使用量はほぼ変わらない ● ただし起動するアプリが増えれば比例してメモリの使用量も増える ● 実製品を見据えたHMI開発ではASISの使用は必須になってくる #unrealfest

98.

なぜ技術公開するか? #unrealfest

99.

自動車業界におけるUE シミュレーション 車両開発中 ビジュアライズ 自動運転 Sim環境構築 デザインレビュー ロボット Sim デザインレビュー 教師データ作成 静止画出力 動画出力 ユーザーテスト 夢がある! toC コンテンツ HMI AI コンシェルジュ? カーコンフィ ギュレーター CG制作 イベント コンテンツ UGC? めっちゃワクワクする! #unrealfest

100.

<ヒストリアの夢> 誰もがPhotoshopを扱うようにUEを扱う世界 UEにAIによるオペレーションが入ったら夢では無いと思う #unrealfest

101.

宣伝 #unrealfest

102.

JAXA×ヒストリアの共同開発 月面シミュレーション 将来的にローバーの走行シミュレーション等で使用 左:SLIMが撮影した画像 右:UE5で再現した月面環境 https://historia.co.jp/archives/45327/ #unrealfest

103.

研究結果を利用した年内公開予定のデモゲーム #unrealfest

104.

https://historia.co.jp/enterprise/soundxr/ #unrealfest

105.

ご清聴ありがとうございました #unrealfest