UNREAL FEST EXTREME 2021 WINTERのユーザー参加型イベント「アンリアルクエスト2~グレイマンからの5つのオーダー~」に挑戦しましたので、振り返り記事を書いてみることにしました。

アンリアルクエスト2とは、 UNREAL FEST開催期間中に毎日「初級」「中級」「上級」のクエストが発表され、それに従ってUnrealEngineを使って実装していくイベントです。全ての初級クエストの実装が完了していれば参加賞も頂くことができ、とても敷居が低く参加しやすいイベントとなっています。

まずは、私の応募作品をご覧ください。

アンリアルクエスト2

本記事では、これの制作過程を記述していこうと思います。

1日目 アセット

  • 【初級】好きなアセットを配置しよう
  • 【中級】揺らめく旗を立てよう
  • 【上級】スプラインに沿ってモノを効率よく配置しよう

1日目のクエストは「アセット」で、既に配布済みのプロジェクト内にアセットを配置し自分好みのレベルを作成するだけで初級クリアとなります。

中級については、第16回UE4ぷちコンに参加した時にチェッカーフラッグを揺らすという処理を入れていたのでそれを思い出してクリア!

今回の冒険ステージ(これは完成版の為、1日目はもっと質素でした)

ただ、改めて見てみると旗の揺れ方に違和感があります。(ポール側も旗が揺らめいてしまっています。)これについての解決方法は、アンリアルクエスト2解説編でEGJ塩谷さんが解説してくださっているので、それを参考に修正してみました。(作品動画には反映されていませんが・・・)

こう見ると違和感ないけど、揺らめいていると結構な違和感が・・・

上級については、第1回アンリアルクエストのジップラインの実装で、プレイヤーが掴むロープをスプラインに沿わせたメッシュで実現していたので、それを思い出してクリア!今回のステージでは、川と橋にそれを使いました。

スプラインで橋を作るBP
コンストラクションスクリプトはこんな感じです

最終日のピックアップ作品紹介を見ていて、多くの方がスプラインに沿ってコインを並べていたのが印象的でした。アイテムをスプラインに沿って並べるという発想が無かったで、とても参考になりました。

2日目 ライティング

  • 【初級】ライティングを全種置こう
  • 【中級】時間を変化させよう
  • 【上級】ライトシャフトを作ろう

2日目のクエストは「ライティング」で、レベルの見た目はともかく、全てのライトを配置するだけで初級クリアとなります。今回の私の作品では、カットシーンでキャラクターの顔を鮮明に見せる為にライトを使用しております。

中級は一見難しそうですが、UE4の標準機能のみで対応可能でした。レベルに配置してあるLightSouceの回転を変えてあげるだけで太陽の位置が変わり、それに伴って夕焼けや、星空も表示されます。

今回は「ラナルータ」の魔法で時間帯を変化させたかったので、BP上でタイムラインを定義しLightSourceに対してSetActorLocationAndRotationノードで時間帯を変化させ、SkySphereのUpdateSunDirectionノードを実行させることで、時間帯の変化の実装を行いました。

魔法ロジック(小賢しく、数値を足したり引いたりして、見栄えのいい時間帯になるようにしていました・・・)

上級についても、UE4の機能だけでBPやプログラムを組まなくても実装可能でした。

LightSourceの”LightShaftBloom”にチェックを入れるだけで、クエスト達成っぽかったのですが、AtmosphericFogを追加して光を拡散させる感じで実現してみました。ただし、プレイ中はこの効果が効いていると見辛らかったのでカットシーンのみライトシャフトとフォグを有効にし、カットシーン終了時に機能をオフにしました。

グレイマンに後光が!

2日目の中級クエストで「ラナルータ」を入れてしまったことから、魔法が使える世界という世界観が確定し、アンリアルクエストという名前も手伝って「ドラゴンクエスト」のパクりのような世界観を目指す事にしました。(ちなみに、第1回のアンリアルクエストではスーパーマリオをパクったので、いつ訴えられてもおかしくない状態です・・・)

3日目 エフェクト

  • 【初級】松明を作ろう
  • 【中級】歩くと煙が立つ
  • 【上級】ゴール演出を作ろう(Niagaraを使ってみよう)

3日目のクエストは「エフェクト」で、たいまつの炎、足元からの土煙、花火などの高度なパーティクルの作成がクリア条件となっていました。

炎パーティクルはスターターコンテンツにある事を知らずに、カスケードで真面目に作成してしまいました。土煙もも同様にカスケードで作成しました。

上級のナイアガラによるゴール演出は、第16回ぷちコンに応募した作品からまるっと持ってきて終了。時間があれば、ナイアガラをイジり倒したかったのですが、昨日思いついた「ドラゴンクエスト風」の世界観に仕上げる事に力を注いでしまい、結局最後までナイアガラを触ることができませんでした。

ナイアガラによる花火

これは最終的に皆様の応募作品を見て知ることになるのですが、何人かの方々は本物の花火にしか見えないエフェクトをナイアガラで作成していました。もともと、「あんまり花火っぽくないなー」と思っていたエフェクトでしたが、皆様の作品をみて、エフェクト作成能力の無さを痛感しました。

4日目 サウンド

  • 【初級】松明に音を付けよう
  • 【中級】歩くと足音が鳴る
  • 【上級】歩く地面によって足音を変えよう

初級は位置による減衰を考慮したサウンドを、中級は3日目の土煙と同じで足のイベントに紐づくサウンド再生を、上級は・・・初めての実装だったので、検索した結果、EGJ岡田さんのブログにて詳しく説明してあったので、それをそのまま利用させて頂きました。

岡田さんのブログ記事をまるっとパクッてます。ライントレースを使えば良いのね!

ここで一つ問題が・・・ステージ前半の橋の上を渡っていると、何故か松明の音が聞こえてきたのです・・・

音の減衰が壁を無視しやがる・・

今回のステージはコの字状になっており、たいまつから出る音の範囲をある程度の大きさにすると、岩壁を超えて音が聞こえる事になってしまいました。修正方法が分からなった為、消極的アプローチとしてたいまつの音が鳴る範囲を小さくして対応してしまいました。プロの現場なら絶対に許されない行為ですが・・・

これについては、解説編の動画で質問した結果、すぐに回答を頂くことができました。なんと、UnrealEngineの標準機能だけで実現可能で、Occlusionのプロパティ値を設定することで、適切に処理してくれることが分かりました。

5日目 ポストプロセス

  • 【初級】温かみか冷たさを感じる色味をつくろう
  • 【中級】ダメージを受けた時の表現をつくろう
  • 【上級】物陰に隠れるとシルエットになる

クエスト最終日は、予想外の「ポストプロセス」でした。運良く事前に学習していた分野だった為、初級・中級はクリア!(ポストプロセスって基本的にPostProcessマテリアルを使うものだと思っていて、一瞬、初級と中級の違いが分からなかったのですが、マテリアルを使わなくても色々な雰囲気を出せるという事を知りました。)

ダメージ表現のポストプロセス

上級は・・・突然難しすぎやしないですか!?3D関連の知識が無さ過ぎて、まったく見当も付きませんでした。

しかし、ドラクエ風を目指すという完全にネタに振った作品を提出するのに、達成していないクエストがあるなんてカッコ悪すぎます。

調べてみると、CustomDepthとSceneDepthがキーワードっぽいことが分かりました。プレイヤーのレンダリングプロパティにあるMeshの”RenderCustomDepthPass”にチェックを入れると、カメラの視点から見て、一番近い表示オブジェクトと、プレイヤーまでの距離がそれぞれ取得できるようになります。プレイヤーが一番手前(カメラに映っている)なら、CustomDepth=SceneDepthとなり、プレイヤーが何等かの物体に隠れた時は隠れている部分はCustomDepth>SceneDepthとなる感じです。

ここまで分かればそれほど難しくなく、 CustomDepth=SceneDepth なら通常のカメラ映像をレンダリングし、 CustomDepth>SceneDepth の時には、CustomDepthが存在している場合のみシルエットを描画するという感じで行けそうです。

まずは、通常のカメラ画像の中でシルエットのみを表示するように処理を組んで、、、、

CustomDepthのオブジェクトだけがシルエットで表示された

そして、プレイヤーが優先される順番の場合(つまり、CustomDepth <= SceneDepth)のみ、上記の結果にカメラ画像を再び重ね合わせると・・・

全身ピンクだったグレイマンが、CustomDepth<=SceneDepthの部分のみ普通に描画された!

なんとか、実装完了!!完成したポストプロセスは以下のようになりました。(処理の流れを追えるようにしたので、ノードが重複している点はお許しください)

無事に上級クエストもクリアできた為、ここから私の暴走が始まります。

その他の実装

アンリアルクエストはお題として出されたクエストを達成すれば良いのですが、それだけでは面白くありません。余裕で上級クエストをクリアしたフリをして、様々な機能を盛り込んでみることにしました。

クエストとは全く関係ない機能で今回の作品に採用したものは・・・

  • 画面遷移(タイトル画面からゲーム画面への遷移)
  • 会話イベント(カットシーン)
  • BGM
  • アニメーションシーン&エフェクト(魔法で昼夜を逆転させる)
  • ランドスケープ
  • 水アニメーション(滝や川を設置する)
  • UMG(やっぱりUMGが無いと寂しいよね)

でした。

特に「会話イベント」は今まで実装した経験がなく、UMGで一文字ずつ表示しながら、キャラクターのカメラを切り替えながら、キャラクターをアニメーションさせる、、、と、色々な要素が詰まっており、いままで実装を避けていました。

しかし、 UNREAL FEST で株式会社ヒストリア様のエアロスクリプトの実装についての講演を見たばかりでしたので、それに感化されてブループリントでカットシーンを作ってみる事にしました。

で、完成したBPがこちら!!

おいっ!

そう、会話の一つ一つをノードで数珠繋ぎにして実装してみたのでした。私の作品のオープニングシーンの会話内に「あんまりイベントが長くなりすぎると、ブループリントがゴチャゴチャする」という言葉がありますが、このBPの事を指して、あの発言になっていたのです。

でも、このロジックは余りにも酷かった為、作り直す事にしました。(終盤にグレイマンとプレイヤーのカットシーンを作る必要があったが、この仕組みでは作りきる自信が無かった・・・)

最終的にはデータテーブルに会話データを持たせることで、自動的に会話してくれるブループリントを作成しました。(客先のパソコンでお昼休みの時間にコッソリ作っていたのは秘密です)

オープニングの会話データ
データテーブルの会話データを受け取って、会話シーンを自動的に実行するBP

欲を言えばSubsystemを使って実装したかったのですが、アンリアルクエストの期間内で実装する自信が無かったので、レベル上にこそっと配置するBPとして作成してしまったのが心残りです。

総括

私がUnrealEngineを触り始めてから第1回アンリアルクエスト・第16回ぷちコンに参加し、それなりにUnrealEngineを使えていると思っていたのですが、限られた時間内(平日は時間が取れても1~2時間程度)で実装するとホントにグダグダな実装になっていくことが実感できました。

すぐに適した実装が思いつかないという事は単純に実力不足ですので、もっと理解を深めていければと思います。

第16回ぷちコン で「入賞まであと一歩」と紹介して頂いたので、良い気になっていたのですが、今回のアンリアルクエストで実力不足を痛感した為、まだまだ修行の日々が続きそうです。

第1回の時も思ったのですが、アンリアルクエストはとても素晴らしい企画だと思っています。同じお題でも、作者によって全く違う作品が出来上がってくる事に驚き、才能ある方たちの作品を拝見でき、自分の知識も付けることができるイベントなので、これからも参加し続けていけたらと思います。(その前にパクり作品すぎてクビにならないように注意しないと・・・)

No responses yet

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です