mainブランチのUE5を覗いてみる

この記事は[Unreal Engine (UE) Advent Calendar 2021その１](https://qiita.com/advent-calendar/2021/ue)19日目の記事です。
おはようございます！！！！！！遅れました！！！すみません！！！！！

初参加&&初投稿です。お手柔らかにお願いします。。
# はじめに
UE5が世に出て半年ほど経ちました。最近はMatrixのデモもあり、Nanite/Lumenすげ～といった空気が再び流れていますが、実はそれ以外にもドキュメントに無い様々な機能がUE5に存在していることをご存知でしょうか？UnrealEngineはGithub上にソースコードが上がっているので、最新のビルドを手元で試すことができます。
 


# (2021年12月時点での)最新のエンジンを手に入れる
まずはソースコードのダウンロードからです。現状(2021/12/19)ではue5に関するブランチは４つ存在します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/0a44d626-a105-9b72-6ab7-e30e6c1583fc.png)
上から順に解説すると、

 - ue5-early-access
    - ランチャーから落とせるUE5のソース。
 - ue5-main
    - 開発チームが行った各種変更がそのままミラーされるブランチ。最新機能はここに入っているがビルドが通る保証は無い。
 - ue5-release-engine-staging
    - 来年春にリリースされるであろうUE5正式版(UE5.0.0)のソースコード。10月中頃に現れた。このブランチのものが一番安定したUE5。
 - ue5-release-engine-test
    - リリース前に向けたテストブランチっぽいけどstagingブランチとの明確な差異はちょっとよくわからない。安定したUE5が欲しければstagingブランチを使うのがよさげ？  
 
となっています。release-engine-stagingブランチのものでもEA版と比べてかなりの変更が入っており、また体感ですがEAよりも全然安定して動いてくれます。EA版はcontrol rigで遊ぶとすぐクラッシュしましたがrelease-engine-stagingではそんなことはありません。


今回は最新機能を覗いてみたいのでue5-mainブランチのものをビルドします。自分はVisual Studio 2022を使いました。UE5がサポートするVSは2019 or 2022なので注意してください。
詳細なやり方は[公式サイト](https://docs.unrealengine.com/4.27/ja/ProductionPipelines/DevelopmentSetup/BuildingUnrealEngine/)に従ってください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/a132106a-7c94-a442-9b57-e2f4a9ad8492.png)
ビルドをかけたところ、運よくエンジン本体は無傷でした。Version5.1.0！！！これで色々遊べるぜ！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/04ec9751-ac92-f8c9-f58a-e10f758f2524.png)
HeadlessChaosのエラーは９月くらいからずっと出ているので無視します。
（この時のコミットハッシュが何だったかメモするの忘れてしましました..すみません。たぶん[f41764a98b778e3371bf2ce2068529327e675a6c](https://github.com/EpicGames/UnrealEngine/tree/f41764a98b778e3371bf2ce2068529327e675a6c)だった気がします。コミュニティによると、[5f829399f57eb106e15a5002161d6f747e4630fb](https://github.com/EpicGames/UnrealEngine/tree/5f829399f57eb106e15a5002161d6f747e4630fb)でもビルドが通るみたいです。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/c9baaf3c-5ca5-752c-8a6b-d17e71ae3d86.png)
UIもEA版とは異なるものになっています。

# 歩いてあそぶ
さて最新のエンジンが手に入りました。色々弄って遊んでみましょう。
## どうやって遊ぶのよ？
僕はいつも**プラグイン**を見るか、**コミットメッセージ**を見るかして新機能のアタリを付けています。

### gitのコミットメッセージを見る
コミットメッセージを見るといっても、エンジン全体ではたった一日で何ページにもわたる変更が入るので、とても全部は見ていられません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/a47550c9-0a40-8fc8-198d-6cf8381442a3.png)
気になるモジュール・プラグインに絞って見ていったほうが良いと思います。  
例えばNiagaraを例に取ります。
夏ごろにエフェクト周りをちょっと触る機会があったのですが、Engine/Plugins/FX/Niagaraのコミットを見ていると見慣れない単語がありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/a586bdb0-1c62-b23d-57e8-0f6ef47f838a.png)
niagaraにGPU raytraced collisions？そんなのそもそもあったっけ？？？と思いgpu particleのcollisionモジュールを見てみると、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/c9358fe9-cbcc-c4e9-7077-7b51ea56a0bd.png)
なんかいるじゃん！！！！
experimentalということで発見当時はまだ使えませんでしたが、今ならもう使えるかも？時間のある時に検証したいですね。

### プラグインを見てみる
UE5-mainには新しいプラグインがどんどん追加/変更されていくので、pluginsを見てみると様々な発見があることが多いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/76ce759d-b33c-0cb9-598d-9a36f72ec0da.png)
左側がビルドしたUE5、右側がEA版UE5です。50個近いプラグインが追加されていることがわかります。
そもそもEA版にもドキュメントに乗っていないプラグインsがそこそこ存在するので、それを含めると結構な数の未知の機能があります。
例えばUE5ではnanite/lumen以外にもアニメーション絡みの機能としてFullbody Ikやmotion warpingが紹介されていますが、それ以外にも様々な新機能が追加されています。　　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/51833814-0aa4-03c8-b571-3b5f1152a6ee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/4f80d88d-7fb8-9309-6c59-508150d98c87.png)　　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/3056b987-22dd-b6c1-6794-a38add041e2b.png)

他にも流行りのUSDに関するものや、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/b174ad27-e377-3a71-9e71-32302661a5a2.png)
ちょっとびっくりするようなのもありました。OpenCVだと....?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/5dd2838b-700e-3018-df95-a5f129cad2f1.png)

githubから落としたUE5は4.27との互換性もあるので、27関連のものももちろん入っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/0d0cc820-22b6-b0da-b2e8-021cfb714511.png)

それと見ていて一番気になったのは**機械学習絡みの機能が結構追加されている**ことです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/f7c308fa-506a-bec4-61e0-7d6945d5881d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/50235bb4-3823-95d8-98e0-eee75e26cfc9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/ebf1a53d-e5d5-8fed-a3a6-860aa851b8df.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/4e51c09c-3bb5-a9ca-b1e9-ad5f86eba1b5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/9c6bad8c-8c2c-fe6d-6c67-89b0480c136c.png)
有効化すればNeural Networkなんていうそのまんまな名前のアセットタイプが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/bbf9d4c0-e7d4-de0e-9760-4bc8b6bf9cf6.png)


こんな感じでざっと見てから、気になるものをちょっと試してみるといったことを自分はやっています。

## どうやって動かすのさ？？
面白そうな機能を見つけたはいいものの、文字通りエンジンの最新機能なのでドキュメントなんてものは存在しません。
エディタ上で適当にこねくり回すだけでそれとなく使い方がわかるものもありますが、大半のプラグインはそうではありません。
動かそうと思った場合、ソースコードを読むか、コミュニティの力を借りて色々試していく必要があります。
### ソースコードを見る
読み方は人それぞれ違うと思うのであくまで僕の一例ですが、とりあえず定義(ヘッダファイル)を見に行きます。
僕がUEのソースコードを眺めるようになったのはUE5が公開されてからで、圧倒的に経験不足なのでもっと賢い読み方があったらぜひ教えてください。  
例えばPoseSearchプラグインを例にとってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/27982ae3-66b5-e782-06e7-85aafa1e2511.png)

ソースを見ると、AnimGraph用ノードのヘッダファイルがいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/1482c905-2114-3293-5ed7-6dd8cefc5f75.png)
AnimGraphで使える関数の定義も見つかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/79971850-642f-ca73-e73c-2cea44fca953.png)
とりあえずエディタで見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/8848277f-d1d1-4b85-1ad0-6bbbd5d5c21d.png)
これだけじゃまだ何もわからないですね。とりあえず何かしらのデータベースが必要だとわかったのでそこの定義に飛びます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/7503fbe8-b910-207d-a26e-49e7add6cbd6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/2b978dc1-8c7a-4ea5-89cc-289e45134b0c.png)
UPoseSearchDatabaseを見ると何かしらのDataAssetだとわかるのでエディタに戻って検索してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/c3625e09-e37c-e563-2440-0c24f38d8451.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/8ef7a409-b263-f137-818f-bd0508167a10.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/34f45b8d-59f9-8bf1-0255-1963714bbeea.png)
何か出てきましたね。

こんな感じでひたすら定義を見てエディタに戻って...みたいなことを繰り返していきます。
そうするとだんだん全体像が見えてくるのでちょっと試しに動かしてみよう....
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/a516bbf5-3f83-6809-856b-28c42d9bc063.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/b9ffd09a-9984-141e-e1b9-c32721b024b0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/6b45e153-c890-09e0-885e-e9b6840cdfc5.png)
**わからん!!!!!!!**
熟練のUE使いなら自力で全てを解決出来たりしますが僕はそうではないので途中で詰まることがあります。
そのようなときはコミュニティの力を頼りましょう。

### 偉大なコミュニティの力
#### Twitter
つよつよエンジニアが集う場所筆頭です。Twitter上には新機能をいろいろ試していらっしゃる方が大勢いるので、誰か同じことやってないかな～と検索をかけてみます。
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Hey look what I found! <a href="https://twitter.com/hashtag/ue5study?src=hash&amp;ref_src=twsrc%5Etfw">#ue5study</a> <a href="https://t.co/b2ZqDoIitj">pic.twitter.com/b2ZqDoIitj</a></p>&mdash; Inu Games (@games_inu) <a href="https://twitter.com/games_inu/status/1397670466861600772?ref_src=twsrc%5Etfw">May 26, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
いました！！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/6a2dc3a2-7667-6b0c-4461-00b9f1cd0032.png)
助けて！！と絡みに行きました。お世話になった場合はお礼を忘れずに伝えましょう。
Pose Searchの場合はアニメーション周りで強そうな方にDMでこっそり聞いたりもしました。ちゃんと丁寧に聞けばきっと答えてくれるはず...!

**＊注意点:例に挙げたこのプラグインですが、実は6月ころに色々試していたもので、最新のエンジンとは仕様がちょっと違います。今回はPose Searchの使い方というよりドキュメントに無い機能の紐解き方を紹介したかったので時系列がちぐはぐな感じになってしましまいました、、ごめんなさい！**

#### Discord
[Unreal Slackers](https://unrealslackers.org)という非常に巨大なコミュニティがDiscordに存在します。
その中にue5-engine-sourceという正にmainブランチの内容について議論するチャンネルがあり、日夜議論が行われています。
直近のトピックはmainブランチのビルドに関することなので、この記事を見てUEの最新ソースに興味を持った方がいらっしゃったらちょうどいま色々質問ができるかなと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238643/7aff0a01-d76b-e171-dc87-e5495e3fe3e4.png)



# おわりに
せっかくなら気になった機能を実際に動かした結果を載せたかったのですが、記事の量がとんでもないことになりそうなのとまだ検証中なものがほとんどなので断念しました。卒論が落ち着いたらぼちぼち記事にできたらいいなと思っています。その頃にはUE5.0.0が正式リリースされていそうな予感もしますが。