カテゴリー別アーカイブ: 技術情報

UE4でゲーム制作 【レイトレーシングを用いてムービーを作る】

ゲーム自体をリアルタイムレイトレーシングに対応するのはまだ大変そうですが、
ムービーだけなら制作環境で完結するしいけるのでは……ということで、
「くちなしアンプル」のオープニングムービー制作にレイトレ機能を使ってみました!


どんなことをやったかを簡単に書いていこうと思います。

はじめに

家にあったGPUがぎりぎり対応していなかったので
(VR開発のために、数年前にちょっといいやつを奮発して買っていたのに…かなしい…)
お値段と相談して中くらいのGPU、GTX 1660を購入しました。

届いたら早速、レイトレで描画してみます。
このシーンが、

機能をオンにして調整すると、

輪郭線などはそのままに、こういう感じに描画できるようになりました。
影や反射がきれいに出ています。
ちなみに、本作はローグライクでダンジョンが動的に生成されるため、
また全体の統一感を出すために、全てのシーンでシャドウの焼き込みを行っていません。
なので余計に影の描画の綺麗さが際立って感じました。

レイトレ機能をオンにする具体的な手順はこちらがわかりやすいです。

以下では、どんな調整をしたかを具体的に書いていきます。

シャドウをいい感じに

ライトのSource Radiusをいじって影の硬さを調整します。
左が0、右が28です。

値が大きいほど、床の影がふんわりしています。
画作りに合う影の硬さを選べるのが楽しい。今回は全体的に柔らかい影を使っています。

反射するマテリアルをふやす

せっかくきれいに反射を描画できるのだから…ということで、
床の反射を強くします。

つやっつやに反射してます。きれい。

ノイズの軽減

反射するオブジェクトのラフネスが高いと、かなりノイズがのってしまいます。
ポストプロセスのRayTracingReflection/MaxRoughnessを、見た目と相談しながらできるだけ小さくします。
しきい値前後でなめらかに反射が描画されなくなるようです。

特にノイズのひどかった髪や肌ですが、反射はいらないだろうと判断して
そのラフネスより小さくなるようにMaxRoughnessを設定します。

あごのつぶつぶが消えました。

レイトレに関するパラメータはこちらを参照にしました。
エディターから設定できるパラメータが一覧になっています。

InstancedMeshをstatic meshに

画像の薬置き場の腕の部分はInstancedMeshになっています。
InstancedMesh自体は描画されるのですが、影や反射が描画されていません。
ビンが空中に浮いてる……!
全部static meshに置き換えてしまいます。

まとめ

前作「マヨナカ・ガラン」でも、曲とあわせたいシーンはムービーにしていたのですが、
シーンの描画自体はゲームと同じものでした。
レイトレができると、ゲームの素材もノンフォトの表現もそのまま使いながら、
ムービーシーンの質を上げられるのがとても嬉しいです。
くちなしアンプルでは今回のオープニング以外にもムービーを取り入れる予定です。

UE4でゲーム制作 【3DWidgetの表示がTemporalAAでおかしくなる】

遅まきながら、4.21から4.22へとアップデートしたところ、

3DWidgetの表示がぶれてしまうように。
左下の白いバーはstatic meshですが、こちらは問題なく表示されています。

TemporalAAはGBufferのVelocityを参照しているので
コマンドから”VisualizeTexture velocity”で表示してみます。

world座標で動きがある部分が黄色く表示されているようです。
velocityからカメラの動きを引いたものが相対的な動きになるはずのところ、
3DWidgetのみカメラの動きが考慮されていないように見えます。

原因を探すにあたり、このスレッドを参考にしました。
むしろなんで今までちゃんと動いてたんだろう…?

ちなみに、同じくVelocityを参照しているmotion blurもこうなります。

誰よりも動いてないはずのUIに誰よりも激しいブラーが……

また、空っぽのプロジェクトで試すと、

ぶれる。
どうやらプロジェクトではなくエンジン自体に原因がありそうです。

いつかは修正が入るのかもしれませんが(今までは動いてたし)
コミケ直前に慌てるのは嫌なので、今のうちに直しておくことに。
根本的な修正にはエンジンに手を入れなくてはならなさそうなので、
とりあえず対処療法でなんとかします。

方法1. TemporalAAをFXAAにする


Widgetはきれいに表示されます。
ただ、動画だと違いがわかりにくいかもしれませんが、
実際の画面では、TemporalAAを見慣れているとちょっともの足りない感じです。

方法2. Widgetの設定 UserInterface/SpaceをScreenにする


Viewportにくっつけるのと同じような感じ……なのかな?
今回はポストプロセスとの兼ね合いもあるので、別の方法を使います。

方法3. 3DWidgetをstatic meshにする

こちらを参考にしながら、
Widgetをテクスチャに書き出して、メッシュに貼り付けてやります。


いいかんじ!
マテリアルの方で調整もできるので、元の画面に近づけたと思います。

—–
2019年6月13日 記述に誤りがあったので修正しました。

UE4でゲーム制作 【2019年5月前半まとめ】

CAVYHOUSEは現在、新作・ダンジョン農地化ローグライク「くちなしアンプル」を製作中です。
使用しているエンジンのUE4に関する進捗を書いていこうと思います。
また、ゲーム全体の進捗はpixivFanboxで公開中です(有料記事になります)。

■グラフィックの改良

「くちなしアンプル」はローグライクなのですが、ダンジョンをレベルアップして農地にすることができます。
今月ようやく、ゲームの肝になる農地を実装できたので、この機会に見た目を改良しようと、いろいろ新しいことを試してみました!

● 「水面の表現」アセットを追加
前作「マヨナカ・ガラン」では、平面的な画作りを目指していたのでリアルなアセットは使っていないのですが、
今回はフォトリアルとノンフォトリアルの中間くらいを目指しているので試してみました。
水面を簡単に表現できてとってもいい感じ。別のアセットもいろいろ試したくなっちゃう。

● Planar Reflectionを配置
後回しになっていた反射に手を入れました。かなりきれい。
(右がPlanar Reflection)

● パーティクルにLightを追加
安全なのが見た目でわかりやすいように、キラキラした光が降ってくるようにしました。
白くて小さい粒が発行しています。

■パフォーマンスの改善

まずはパフォーマンスのことは考えずに作って、重くなったら改善するようにしているのですが、
ここ数ヶ月、システムや描画を追加して、ちょっと重たくなってきたのでプロファイルを覗いてみました。
気になったのは2点。

● Generate Overlap Eventsをoffに
今回のゲームはマス目型のローグライクなので、衝突判定は使わずに実装しています。
組み込みのPlaneやCubeのコリジョンがそのまま残ってしまっていたので、Overlap Eventをoffにしました。

● arrayのget
想定よりも呼び出し回数が多かったので調べてみたところ、
ブループリントのANDノードは、falseの入力を見つけても止まらずに、全部の入力を評価するようです(ORも同様)。
※リンク先参照

画像のような条件チェックができないので、ブランチを明示的に増やして、必要ない呼び出しを回避しました。

まだ余裕がありそうなので、パフォーマンスの許す限り描画をリッチにしていく予定です!

■最後に…ScreenshotSaturdayまとめ