豚×京都
~UE4でなろう破壊神~
Epic Games Japan
Technical Artist - Developer Relations
斎藤 修
#UE4 | @UNREALENGINE
自己紹介
斎藤 修
Epic Games Japan
Technical Artist - Developer Relations
● 2019年6月からEpicに入りました
● それまでは規模大きめのコンソール開発してました
● その前は漫画とか描いてました
● UE4とHoudiniが好物です
https://twitter.com
/shiba_zushi
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
破壊って いいですよね…
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
皆さんもとにかく物を破壊したくなったこと
ありますよね?
#UE4 | @UNREALENGINE
はじめに
人は内なる破壊衝動を秘めているものです
#UE4 | @UNREALENGINE
はじめに
しかしここ法治国家日本では
勝手に物を壊すと怒られます
#UE4 | @UNREALENGINE
はじめに
なので UE4を使って破壊しましょう!
#UE4 | @UNREALENGINE
今日話すこと
#UE4 | @UNREALENGINE
今日話すこと
・豚を使って京都の街並みを破壊する方法
#UE4 | @UNREALENGINE
今日話すこと
・豚を使って京都の街並みを破壊する方法
→UE4における破壊に関する機能
ワークフローの紹介
#UE4 | @UNREALENGINE
今日話すこと
・豚を使って京都の街並みを破壊する方法
→UE4における破壊に関する機能
ワークフローの紹介
Rigid Body Soft Body
AlembicFBX VAT
Niagara Raymarching Houdini
Fluid
PhysX Chaos etc...
#UE4 | @UNREALENGINE
はじめに
というわけで
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
壊しました!
#UE4 | @UNREALENGINE
はじめに
この作例を通して解説をしていこうと思います
#UE4 | @UNREALENGINE
はじめに
まずはじめに 私の中の破壊神は仰られました
#UE4 | @UNREALENGINE
はじめに
まずはじめに 私の中の破壊神は仰られました
美しいものを
壊しなさい
#UE4 | @UNREALENGINE
はじめに
というわけで
使用させて頂いていたのは京都の美麗アセット
#UE4 | @UNREALENGINE
はじめに
作者の方には豚で壊す許可を頂いております
#UE4 | @UNREALENGINE
はじめに
では 早速破壊を……
#UE4 | @UNREALENGINE
はじめに
お待ちなさい
#UE4 | @UNREALENGINE
はじめに
もしかするとよくあるやり取り
#UE4 | @UNREALENGINE
はじめに
ねえ
この建物ぶっ壊したいんだけど
ちゃちゃっとやっといてくれない?
モデルあるからすぐ壊せるでしょ?
#UE4 | @UNREALENGINE
はじめに
罪
#UE4 | @UNREALENGINE
はじめに
モデルは破壊readyにする必要があります
#UE4 | @UNREALENGINE
破壊readyとは?
・モデルが閉じていること
・モデルがめり込んでないこと
#UE4 | @UNREALENGINE
なぜ??
破壊とは つまり
「物理的」なシミュレーションです
#UE4 | @UNREALENGINE
なぜ??
モノの形状、構造、質量
それらが正しくなければ
正しいシミュレーションは行なえません
#UE4 | @UNREALENGINE
なぜ??
適切な形で めり込みのない
物理的に正しいモデルにする必要があります
#UE4 | @UNREALENGINE
モデルの準備
今回のこちらの美しい京都アセット
美しいだけではなくゲーム用に「最適化」されています
#UE4 | @UNREALENGINE
モデルの準備
ゲーム用のアセットは最適化のために
見えないところは消していたり 一体化させてたりします
#UE4 | @UNREALENGINE
モデルの準備
なので これを
そのままシミュレーションすると……
#UE4 | @UNREALENGINE
モデルの準備
ばーん
#UE4 | @UNREALENGINE
モデルの準備
正しくシミュレートするとこちら
#UE4 | @UNREALENGINE
モデルの準備
物理的に正しいモデル とても大事ですね
#UE4 | @UNREALENGINE
モデルの準備
では 先程の家一軒を破壊readyにする為に
どれくらいの対応が必要か?
#UE4 | @UNREALENGINE
モデルの準備
ノード全体図
#UE4 | @UNREALENGINE
モデルの準備
シミュレーション設定
#UE4 | @UNREALENGINE
モデルの準備
モデル対応 シミュレーション設定
#UE4 | @UNREALENGINE
モデルの準備
対応が必要だった箇所を可視化してみます
#UE4 | @UNREALENGINE
モデルの準備
こちらの家
#UE4 | @UNREALENGINE
モデルの準備
パーツ単位で並べると こうなります
#UE4 | @UNREALENGINE
モデルの準備
赤色が 破壊readyではないパーツです
#UE4 | @UNREALENGINE
モデルの準備
モデルを裏側から見てみる
#UE4 | @UNREALENGINE
モデルの準備
モデルを裏側から見てみる
厚み0(ペラポリ)
裏面ポリなし
見えてない箇所は
天井がない
見えてない箇所は
壁がない
一体成型された瓦
一枚ポリで
まとめられた板壁
閉じられていない
ぶっさしモデル
地面へのめり込み
#UE4 | @UNREALENGINE
モデルの準備
これらは全て 非常に丁寧な「最適化」です
厚み0(ペラポリ)
裏面ポリなし
見えてない箇所は
天井がない
見えてない箇所は
壁がない 地面へのめり込み
一枚ポリで
まとめられた板壁
一体成型された瓦
閉じられていない
ぶっさしモデル
#UE4 | @UNREALENGINE
伝えたいこと
最適化したアセットを
あとから破壊readyにするのは大変です
#UE4 | @UNREALENGINE
伝えたいこと
破壊は 計画的に
#UE4 | @UNREALENGINE
伝えたいこと
ちなみに この作例の場合
#UE4 | @UNREALENGINE
伝えたいこと
画面内だけでも100overのモデルが使用されています
#UE4 | @UNREALENGINE
伝えたいこと
可能な限り自動化しましたが
とても大変でした…
#UE4 | @UNREALENGINE
モデルの準備
さらに次の落とし穴
#UE4 | @UNREALENGINE
モデルの準備
これ 破砕readyのモデル
UE4でレイアウトしといたから
いい感じに壊しといて
#UE4 | @UNREALENGINE
愚か
モデルの準備
#UE4 | @UNREALENGINE
モデルの準備
Twitterでの投稿
#UE4 | @UNREALENGINE
モデルの準備
Twitterでの投稿
#UE4 | @UNREALENGINE
モデルの準備
UE4にモデルをインポートすると
基本的には全て三角化されます
#UE4 | @UNREALENGINE
モデルの準備
これらの三角ポリゴンは全てバラバラですが
#UE4 | @UNREALENGINE
モデルの準備
「Remove Degenerates」のチェックを入れると
位置、UV、ノーマルなどが同じ頂点は結合されます
#UE4 | @UNREALENGINE
モデルの準備
つまり UE4にインポートするという事は
元のモデルとは全く違うモデルが生成されるという事です
#UE4 | @UNREALENGINE
モデルの準備
さらに エクスポート時にUE4は
気を利かせて頂点融合してからエクスポートします
#UE4 | @UNREALENGINE
モデルの準備
具体例を出しますと 例えばこのモデルは
UE4に入れて出すとこうなって出てきたりします
#UE4 | @UNREALENGINE
モデルの準備
#UE4 | @UNREALENGINE
愚か
モデルの準備
#UE4 | @UNREALENGINE
モデルの準備
ちなみに対処方法
#UE4 | @UNREALENGINE
モデルの準備
UE4からエクスポートしたFBXには
各トランスフォーム情報が含まれています
#UE4 | @UNREALENGINE
モデルの準備
UE4からエクスポートしたFBXには
各トランスフォーム情報が含まれています
#UE4 | @UNREALENGINE
モデルの準備
これを使って変換行列を作れば
元モデルからレイアウトを再現することが可能です
#UE4 | @UNREALENGINE
モデルの準備
https://twitter.com/shiba_zushi/status/1257055294095413248?s=20
詳しくは上記連続ツイートをどうぞ
#UE4 | @UNREALENGINE
伝えたいこと
破壊は 計画的に
#UE4 | @UNREALENGINE
ワークフロー
さて 数々の地雷をくぐり抜け
ようやく美しき京都アセットが破壊readyとなりました
#UE4 | @UNREALENGINE
ワークフロー
UE4で破壊表現する場合
大きく分けて2つのワークフローがあります
#UE4 | @UNREALENGINE
ワークフロー
UE4で破壊表現する場合
大きく分けて2つのワークフローがあります
事前に破壊する リアルタイムに破壊する
#UE4 | @UNREALENGINE
ワークフロー
UE4で破壊表現する場合
大きく分けて2つのワークフローがあります
事前に破壊する リアルタイムに破壊する
Alembic
FBX
VAT
Niagara
PhysX
Chaos
#UE4 | @UNREALENGINE
ワークフロー
今回の作例は「事前に破壊する」を採用しています
事前に破壊する リアルタイムに破壊する
Alembic
FBX
VAT
Niagara
PhysX
Chaos
#UE4 | @UNREALENGINE
ワークフロー
事前に破壊する リアルタイムに破壊する
Alembic
FBX
VAT
PhysX
Chaos
Niagara
Niagaraによるリアルタイム破砕は
このあと池田さんの講演で事例がご紹介されます!
#UE4 | @UNREALENGINE
ワークフロー
事前に破壊する リアルタイムに破壊する
Alembic
FBX
VAT Chaos
Niagara
PhysXとChaosは?
PhysX
#UE4 | @UNREALENGINE
……
ワークフロー
#UE4 | @UNREALENGINE
ワークフロー
こちらの家で検証を行いました
#UE4 | @UNREALENGINE
ワークフロー
まず上のHoudiniEngineを使う手法で
モデルをシミュレート可能なStaticMesh群に変換
https://www.youtube.com/watch?v=4xUAueQigbo
#UE4 | @UNREALENGINE
ワークフロー
PhysXの場合は約2000弱パーツのStaticMesh
#UE4 | @UNREALENGINE
ワークフロー
Chaosの場合はそれをGeometryCollection化しました
#UE4 | @UNREALENGINE
ワークフロー
PhysXの場合(4.25.0)
#UE4 | @UNREALENGINE
ワークフロー
Chaosの場合(4.25.0)
#UE4 | @UNREALENGINE
……
ワークフロー
#UE4 | @UNREALENGINE
ワークフロー
https://docs.unrealengine.com/ja/Engine/Chaos/ChaosDestruction/index.html
#UE4 | @UNREALENGINE
https://docs.unrealengine.com/ja/Engine/Chaos/ChaosDestruction/index.html
ワークフロー
現在Chaosはベータ機能となっております
#UE4 | @UNREALENGINE
ワークフロー
特にGeometryCollection周りの挙動は
マイナーバージョンごとでもどんどん改善されております
#UE4 | @UNREALENGINE
Chaosについては また別の機会に
掘り下げてお話させて頂けましたら
ワークフロー
#UE4 | @UNREALENGINE
https://docs.unrealengine.com/ja/Engine/Chaos/ChaosDestruction/index.html
ワークフロー
今すぐにでも触りたいという方は こちら
#UE4 | @UNREALENGINE
ワークフロー
では「事前に破壊する」ワークフローについて
事前に破壊する リアルタイムに破壊する
Alembic
FBX
VAT
Niagara
PhysX
Chaos
#UE4 | @UNREALENGINE
事前破壊
「事前に破壊する」場合 破壊シミュレーション自体は
各DCCツールなどで行っておく必要があります
#UE4 | @UNREALENGINE
事前破壊
今回はHoudiniを利用しました
#UE4 | @UNREALENGINE
事前破壊
Houdini18より追加されたデストラクション系の機能は
非常に簡単にRBDシミュレーションを組むことが可能です
https://www.sidefx.com/ja/products/houdini/whats-new-in-18/
#UE4 | @UNREALENGINE
事前破壊
モデルさえ破壊readyであれば
シミュレーションはさほど難しくないです
設定これだけ
#UE4 | @UNREALENGINE
事前破壊
SideFX Labsを使うと
デストラクションデータのエクスポートも非常に簡単です
https://www.sidefx.com/ja/products/houdini/whats-new-in-18/
#UE4 | @UNREALENGINE
事前破壊
破壊シミュレーションが用意できたら
UE4へインポートして実装していきます
#UE4 | @UNREALENGINE
事前破壊
今回検証した実装方法は以下の3種類
事前に破壊する リアルタイムに破壊する
Alembic
FBX
VAT
Niagara
PhysX
Chaos
#UE4 | @UNREALENGINE
事前破壊
これらの手法 実装方法は異なりますが
見た目としてはほぼ同じです
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ? ? ?
処理負荷 ? ? ?
作業コスト ? ? ?
事前破壊
それぞれの手法の特徴をご説明します
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ? ? ?
処理負荷 ? ? ?
作業コスト ? ? ?
FBX
まずはFBXから
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX
FBXと分類していますが 実装としては
スケルタルメッシュによるボーンアニメーションです
#UE4 | @UNREALENGINE
FBX
破壊モーションはHoudiniで作成し 「Side FX Labs」の
「RBD to FBX」でFBXエクスポートしています
#UE4 | @UNREALENGINE
FBX
「RBD to FBX」に関してはこちらをご参照下さい
https://www.sidefx.com/ja/tutorials/game-tools-rbd-to-fbx/
#UE4 | @UNREALENGINE
FBX
UE4はオブジェクトにアニメーションがベイクされていると
スキニングしなくても自動的にボーンを作成してくれます
#UE4 | @UNREALENGINE
FBX
その際 ルートが原点にできるので
アニメーション精度やバウンズにはご注意下さい
#UE4 | @UNREALENGINE
FBX
また スケルタルアニメーションのメリットとしては
ノーティファイを打てる事も挙げられると思います
#UE4 | @UNREALENGINE
FBX
エフェクトを骨やソケットにアタッチ可能な点も
非常に使い勝手が良いのではないかと思います
#UE4 | @UNREALENGINE
FBX
また スケルタルアニメーションは
アニメーション圧縮が可能な点も強力なメリットです
#UE4 | @UNREALENGINE
FBX
アニメーション圧縮の詳細に関しましては
こちらが非常に素晴らしい記事です
http://hogetatu.hatenablog.com/entry/2018/12/05/000944
#UE4 | @UNREALENGINE
FBX
詳細は記事を見て頂けたらと思うのですが
破壊はアニメーションが曖昧でもバレにくく
ボーン階層も浅いので
PerTrackで荒く圧縮をかけてもいいと思います
#UE4 | @UNREALENGINE
FBX
また 処理負荷に関しては主にCPUコストとして出てきます
#UE4 | @UNREALENGINE
FBX
また 処理負荷に関しては主にCPUコストとして出てきます
タスクスレッドで
並列処理される
アニメーション更新処理
#UE4 | @UNREALENGINE
FBX
また 処理負荷に関しては主にCPUコストとして出てきます
タスクスレッドで
並列処理される
アニメーション更新処理
レンダースレッドで処理される
GPUスキニング更新処理
#UE4 | @UNREALENGINE
FBX
スケルタルアニメーションの負荷はボーン数に依存します
GPUスキニング更新処理は並列化されない点もご注意下さい
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ? ? ?
処理負荷 ? ? ?
作業コスト ? ? ?
FBX
という感じで凄くざっくりとまとめますと…
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ○ ?
処理負荷 ? ? ?
作業コスト ? ? ?
FBX
という感じで凄くざっくりとまとめますと…
AlembicFBX VAT
アニメーション圧縮が
可能なので 長尺で有利
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ? ?
処理負荷 ○ ? ?
作業コスト ? ? ?
FBX
という感じで凄くざっくりとまとめますと…
AlembicFBX VAT
懸念はCPUによる
アニメーション更新コストと
GPUスキニング更新コスト
(特別重いという事はないです)
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ? ?
処理負荷 ○ ? ?
作業コスト △ ? ?
FBX
という感じで凄くざっくりとまとめますと…
AlembicFBX VAT
パーツ数が多いと
インポート処理が結構大変
実装手順もそれなりに多い
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ? ?
処理負荷 ○ ? ?
作業コスト △ ? ?
FBX
FBXはこんな感じです!
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ? ?
処理負荷 ○ ? ?
作業コスト △ ? ?
Alembic
では次にAlembic
AlembicFBX VAT
#UE4 | @UNREALENGINE
Alembic
はじめに Alembicインポータはデフォルトで使用できますが
「実験的機能」である点はご考慮下さい
https://docs.unrealengine.com/ja/Engine/Content/Importing/AlembicImporter/index.html
#UE4 | @UNREALENGINE
Alembic
また Alembicには3種のインポート方法があります
#UE4 | @UNREALENGINE
Alembic
今回はこちらのジオメトリキャッシュを使用しています
#UE4 | @UNREALENGINE
Alembic
Alembic
レベルに配置するとこんな感じです
FBX VAT
#UE4 | @UNREALENGINE
Alembic
破壊モーションはFBXと同じくHoudiniで作成したものを
「Alembic」ノードでabcエクスポートしています
#UE4 | @UNREALENGINE
Alembic
作成したabcファイルは
ドラッグ&ドロップで
そのままインポートできます
マテリアルはフェイスセット
によって分けられるので
作成するのを忘れないように
ご注意下さい
#UE4 | @UNREALENGINE
Alembic
また ジオメトリキャッシュは
モデルやモーションのプレビューができない点が若干困ります
#UE4 | @UNREALENGINE
Alembic
シーケンサーのジオメトリキャッシュトラックを使うと
プレビューが簡単にできて便利です
#UE4 | @UNREALENGINE
Alembic
ジオメトリキャッシュで気をつけるべき点といえば
やはり肥大しがちなデータサイズです
Alembic
FBX
#UE4 | @UNREALENGINE
Alembic
また 並列処理されていますが
頂点全てを操作する為処理負荷も高めです
レンダースレッドと
タスクスレッドで
大量に処理されている
デコード処理など
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ? ?
処理負荷 ○ ? ?
作業コスト △ ? ?
Alembic
という感じでざっくりとまとめますと…
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ?
処理負荷 ○ ? ?
作業コスト △ ? ?
Alembic
という感じでざっくりとまとめますと…
AlembicFBX VAT
頂点ごとのデータを持つため
データサイズは重い
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ?
処理負荷 ○ △ ?
作業コスト △ ? ?
Alembic
という感じでざっくりとまとめますと…
AlembicFBX VAT
頂点ごとに処理されるため
処理負荷も重め
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ?
処理負荷 ○ △ ?
作業コスト △ ○ ?
Alembic
という感じでざっくりとまとめますと…
AlembicFBX VAT
インポート処理が比較的早く
エクスポートも簡単
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ?
処理負荷 ○ △ ?
作業コスト △ ○ ?
Alembic
Alembicはこんな感じです!
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ?
処理負荷 ○ △ ?
作業コスト △ ○ ?
VAT
最後にVAT
AlembicFBX VAT
#UE4 | @UNREALENGINE
VAT
VATとはVertex Animation Textureの略で
頂点シェーダーを利用してオフセット表現を行う手法の事です
#UE4 | @UNREALENGINE
VAT
VATの仕組みに関してはこのあと池田さん 宮本さんの講演で
とても丁寧にご説明されておりますので 是非そちらをご覧下さい
#UE4 | @UNREALENGINE
VAT
破壊モーションはこれまで同様Houdiniで作成し
「Side FX Labs」の「Vertex Animation Textures ROP」で
エクスポートしています
#UE4 | @UNREALENGINE
VAT
VATテクスチャはインポート後
非圧縮 リニア ニアレストに設定
#UE4 | @UNREALENGINE
VAT
VATマテリアルは「Vertex Animation Textures ROP」の
テキストをエディタにコピペするだけで簡単に作れます
#UE4 | @UNREALENGINE
VAT
データサイズは RBDに関して言えば
VATはかなりリーズナブルです
Alembic
FBX
VAT
#UE4 | @UNREALENGINE
VAT
処理負荷もVATは基本的に全てGPUで処理されるので
CPU負荷はほとんどありません
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ?
処理負荷 ○ △ ?
作業コスト △ ○ ?
VAT
という事でざっくりとまとめますと…
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○
処理負荷 ○ △ ?
作業コスト △ ○ ?
VAT
という事でざっくりとまとめますと…
AlembicFBX VAT
RBDは破片単位で
ピクセルを持つので
データサイズは小さい
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○
処理負荷 ○ △ ◎
作業コスト △ ○ ?
VAT
という事でざっくりとまとめますと…
AlembicFBX VAT
処理負荷はGPUに依存する
現行コンソールなどであれば
概ね最軽量と考えて良い
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○
処理負荷 ○ △ ◎
作業コスト △ ○ ✕
VAT
という事でざっくりとまとめますと…
AlembicFBX VAT
マテリアルやテクスチャの
適切な設定と管理が大変
エクスポートも
問題が発生しやすい
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○
処理負荷 ○ △ ◎
作業コスト △ ○ ✕
VAT
VATはこんな感じです!
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○
処理負荷 ○ △ ◎
作業コスト △ ○ ✕
ワークフロー
かなり雑な比較ですので あくまで参考程度に…
AlembicFBX VAT
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○ ?
処理負荷 ○ △ ◎ ?
作業コスト △ ○ ✕ ?
ワークフロー
ちなみに もしここにリアルタイム破壊を入れた場合…
AlembicFBX VAT
PhysX
Chaos
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○ ◎
処理負荷 ○ △ ◎ ?
作業コスト △ ○ ✕ ?
ワークフロー
AlembicFBX VAT
PhysX
Chaos
ちなみに もしここにリアルタイム破壊を入れた場合…
リアルタイムに計算されるので
データサイズは小さい
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○ ◎
処理負荷 ○ △ ◎ ✕
作業コスト △ ○ ✕ ?
ワークフロー
AlembicFBX VAT
PhysX
Chaos
ちなみに もしここにリアルタイム破壊を入れた場合…
数万パーツの破片の演算を
リアルタイムで行うのは
かなり厳しい
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○ ◎
処理負荷 ○ △ ◎ ✕
作業コスト △ ○ ✕ ◎
ワークフロー
AlembicFBX VAT
PhysX
Chaos
ちなみに もしここにリアルタイム破壊を入れた場合…
DCCツールと行ったり来たり
しなくてすむのは非常に楽
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○ ◎
処理負荷 ○ △ ◎ ✕
作業コスト △ ○ ✕ ◎
ワークフロー
AlembicFBX VAT
PhysX
Chaos
こんな感じでしょうか
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○ ◎
処理負荷 ○ △ ◎ ✕
作業コスト △ ○ ✕ ◎
ワークフロー
AlembicFBX VAT
PhysX
Chaos
状況に応じて 適宜一番良い手法をご選択頂けたらと思います
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○ ◎
処理負荷 ○ △ ◎ ✕
作業コスト △ ○ ✕ ◎
ワークフロー
AlembicFBX VAT
PhysX
Chaos
ちなみに今回の作例では Rigid BodyではFBXを
#UE4 | @UNREALENGINE
FBX Alembic VAT
データサイズ ○ ✕ ○ ◎
処理負荷 ○ △ ◎ ✕
作業コスト △ ○ ✕ ◎
ワークフロー
AlembicFBX VAT
PhysX
Chaos
Soft BodyではAlembicを使用しました
#UE4 | @UNREALENGINE
ワークフロー
理由としては実装速度重視で 処理負荷を度外視した為です
(重すぎたらVATに置き換えようと考えていました)
日本家屋
街並み全体
(RigidBody)
FBX
豚
のれんなど
(SoftBody)
Alembic
#UE4 | @UNREALENGINE
SoftBody
ちなみに SoftBodyに関しては
Alembic、VATはそのまま実装可能かと思いますが
#UE4 | @UNREALENGINE
SoftBody
FBXもスキニングコンバーターという手法がありますので
是非お試し頂けたらと思います
https://www.sidefx.com/tutorials/game-tools-skinning-converter/
#UE4 | @UNREALENGINE
シーン製作
さて これでようやく事前破壊したデータを
UE4に実装できましたので 見た目を調整していきましょう
#UE4 | @UNREALENGINE
シーン製作
まずは破壊データインポート後の
マテリアルアサインに関して
#UE4 | @UNREALENGINE
自動化BP
今回 少し複雑な破壊でマテリアルの種類が多かったので
Editor Utility Widgetでアサインを自動化しました
#UE4 | @UNREALENGINE
自動化BP
数十あるマテリアルを手作業で割り当てるのは非常に辛いので
単純作業には是非皆様BPでの自動化をお役立て下さい
#UE4 | @UNREALENGINE
自動化BP
Editor Utility Widgetに関する情報は
ネット上で強い方が沢山発信して下さっております
本当にありがとうございます
http://kinnaji.com/
https://qiita.com/EGJ-Kaz_Okada/items/985b98fb934d751f4f69
https://qiita.com/EGJ-Kaz_Okada/items/9f530db3b53d0fde3f20
#UE4 | @UNREALENGINE
エフェクト
見た目が多少整ったところで 次はエフェクト
#UE4 | @UNREALENGINE
エフェクト
使用したのはNiagaraとRaymarchingです
#UE4 | @UNREALENGINE
Niagara
Niagaraの実装は池田さんの本を参考に
完全にそのまま実装しました
#UE4 | @UNREALENGINE
Niagara
Houdiniで作成した破壊データから
Impactの位置や方向などを出し
#UE4 | @UNREALENGINE
Niagara
SideFXLabsのNiagaraノードを使用して
HCSVとして書き出し UE4へインポート
#UE4 | @UNREALENGINE
Niagara
Niagaraで使用することで 破壊シミュレーションに対応した
エフェクトを簡単に出すことが可能です
#UE4 | @UNREALENGINE
Niagara
4.25よりNiagaraはプロダクションレディです
皆様是非ご活用頂けましたら幸いです
https://www.unrealengine.com/ja/release-notes
#UE4 | @UNREALENGINE
Raymarching
次にRaymarching
#UE4 | @UNREALENGINE
Raymarching
こちらはライアンさんのシェーダーを
有り難く使わせて頂いております
https://shaderbits.com/
#UE4 | @UNREALENGINE
Raymarching
Volumetricsというプラグインにマテリアルがありますので
皆様すぐにでも使用可能です
#UE4 | @UNREALENGINE
Raymarching
今回はRaymarchingで煙を三次元的に動かしたかったので
3Dテクスチャを連番で作成しました
#UE4 | @UNREALENGINE
Raymarching
Houdiniで 破壊シミュレーションに合わせて
煙のシミュレーションを行い
#UE4 | @UNREALENGINE
Raymarching
SideFXLabsの「Volume to Texture」ノードで
3Dテクスチャをエクスポート
#UE4 | @UNREALENGINE
Raymarching
それをVolumetricsマテリアルのレンダーターゲットに
連番として流し込みました
#UE4 | @UNREALENGINE
Raymarching
レンダーターゲットへの連番適用は
シーンキャプチャで撮影したものを力技で流し込みました
#UE4 | @UNREALENGINE
Raymarching
Pythonを使用し 連番テクスチャをアサインしたプレーンを
フレーム数分自動作成して整列させ
#UE4 | @UNREALENGINE
Raymarching
これらをカメラフェードさせつつシーンキャプチャする事で
連番テクスチャを一枚のレンダーターゲットで扱う事ができます
#UE4 | @UNREALENGINE
Raymarching
今回はメモリを
気にしなかったので
大量の高解像度連番テクスチャを
使用しましたが 状況によっては
ループ化してしまうのも
良いのではないかと思います
#UE4 | @UNREALENGINE
Raymarching
またVolumetricsには
リアルタイム流体シミュのサンプルもありますので
こちらを使ってみるのも楽しいかも知れません
#UE4 | @UNREALENGINE
Material
次にマテリアルでの小技
#UE4 | @UNREALENGINE
Material
自然な壊れ感になるように歪ませました
#UE4 | @UNREALENGINE
Material
手法としてはPre-Skined Local Positionを利用することで
モデルが壊れたタイミングで歪むようにしています
#UE4 | @UNREALENGINE
Material
Pre-Skined Local Positionはスケルタルメッシュアニメーションでのみ
使用可能なノードですが 非常に便利です
#UE4 | @UNREALENGINE
Material
AlembicやVATの場合でも
UVに壊れる前の位置や 壊れた後の位置を埋め込んでおくことで
自然なひび割れなどを表現することが可能かと思います
#UE4 | @UNREALENGINE
Material
モデルを割るのが厳しい場合は
エッジ汚しのUVを追加するのも良い方法かもしれません
https://www.slideshare.net/EpicGamesJapan/ue4-139190798
#UE4 | @UNREALENGINE
撮影
概ね破壊シーンの構築は完了したので
ここからは撮影調整です
#UE4 | @UNREALENGINE
撮影
今回カメラはバーチャルカメラを使用しました
自然な手ブレを追加する為です
https://docs.unrealengine.com/ja/Engine/Plugins/VirtualCameraPlugin/index.html
#UE4 | @UNREALENGINE
撮影
専用のアプリとプラグインを入れるだけで
すぐに撮影が可能ですので 是非皆様もお試し頂けましたら
#UE4 | @UNREALENGINE
撮影
細かな手ブレなどは補正されてしまいますので
カメラシェイクトラックなどを追加するのも良いかと思います
https://historia.co.jp/archives/7374/
#UE4 | @UNREALENGINE
仕上げ
ライティングとポスプロは 基本的に京都アセットの設定を
そのまま使用させてもらってます
#UE4 | @UNREALENGINE
仕上げ
適切なライティング設定が行われていれば
昼と夜を切り替えるのも非常に簡単です
#UE4 | @UNREALENGINE
仕上げ
ディレクターからの突然の修正にも
UE4であればきっと柔軟に
対応する事ができるでしょう
#UE4 | @UNREALENGINE
仕上げ
と いう感じで……
#UE4 | @UNREALENGINE
仕上げ
完成しました!!
#UE4 | @UNREALENGINE
仕上げ
完成しました!!
#UE4 | @UNREALENGINE
まとめ
まとめです
#UE4 | @UNREALENGINE
まとめ
破壊シーンを作るには
破壊readyのモデルが必要です
破壊は 計画的に行いましょう
#UE4 | @UNREALENGINE
まとめ
破壊シーンを作るには
破壊readyのモデルが必要です
破壊は 計画的に行いましょう
UE4には破壊シーンを実装する際
複数のワークフローが存在します
状況に合わせてより良い方法を
選択しましょう
#UE4 | @UNREALENGINE
まとめ
皆様の破壊衝動が
UE4で合法的に発散されることを願っております
#UE4 | @UNREALENGINE
まとめ
良い破壊神ライフを!
#UE4 | @UNREALENGINE
ご清聴
ありがとうございました

豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)