ここはUE4村。
ブルーマンたちが楽しく暮らす小さな村。
あなたはそんな村に引っ越してきたのですが、何かの手違いで村長になってしまいました。
相棒のシズエ・サンチャゴと一緒に村に襲いかかる地底人と戦う羽目になったあなたは某ス○ブラ出演のために頑張るのでした…
そんなあなたの村がこちら。
超・適・当!
2015年最初の更新がこんな適当なネタでいいのか…
まあ、いわゆる『おいでよ どうぶつの森』っぽい、地平線が下に落ちていってるような表現をするマテリアルです。
正直なところ色々と問題が多いのでそのままでは使えないのですが、ゲームの作り方しだいでなんとかなるかも。
本格的に使いたいならエンジンを改造すべきです。
詳しいことは続きから。
とはいえ、難しいことは何もしてません。
この手法はカメラの奥行方向に進めば進むほど頂点のZ軸を下方向に下げていくというだけです。
リニアに傾けていくと丸まってる感じが出ないので、奥行方向の距離を2乗し、これに係数をかけて頂点オフセットとします。
マテリアルファンクションはこんな感じ。
係数はパラメータコレクションで与えるようにしています。
この手法の利点は、ゲーム制作時のコリジョンなどはそのまま普通に作ればいい、ということです。
移動とかも普通の座標で構いません。
最初の画像では係数を0.001にしていますが、これを0.0にすると普通の状態になります。
ちなみに、普通の状態ではこんな感じ。
至って普通であることがわかります。
通常のゲーム制作はこの状態で行い、デバッグや出荷状態で係数を入れればOKです。
しかし、最初にも書いたとおり問題が多いです。
この手法は見た目だけなのでゲーム制作手法自体は普通のやり方で対応できるのですが、見た目に関わる部分の対応ができません。
具体的に言うと、ライトとシャドウです。
ライトの位置や方向はこの手法では歪ませられませんし、シャドウマップも正常に行われません。
静的なアクターについてはライトマップを利用することである程度の対応ができますが、動的なアクターの動的シャドウはどうしようもないです。
これを正確に行いたいのであればエンジンの改造が必要になります。
改造方法としては、ライティングの際にピクセルのワールド座標を正しい座標(歪ませる前の座標)に戻してライティングをしなければなりません。
シャドウイングも同様です。
これらは残念ながらUE4の基本機能では実現できないので、エンジンを改造しなければならないわけです。
2つ目はパーティクルです。
GPUパーティクルの衝突判定はZバッファを使っているかと思います。
しかし、Zバッファは歪んでしまった状態でのものなのでこれもやはり正常に動作しません。
こればっかりはエンジン改造でもどうにもならない気がしますので、GPUパーティクルでの衝突判定は諦めましょう。
3つ目はオブジェクトのカリング判定です。
これも普通にやると正常にカリングされないので、バウンディングボックスを少し大きくするなりの対応が必要だと思います。
4つ目は頂点の数です。
あくまでも頂点を歪ませる処理なので、ポリゴンの割り方が甘いと滑らかに歪んでくれません。
World Position Offsetは頂点シェーダの処理のためか、テッセレーションをONにしてもうまく動作してくれませんでした。
ドメインシェーダでWorld Position Offsetを有効にする手段はあるんでしょうかね?
最後に、シューター系のゲームとは大変相性が悪いです。
まあ、この画面でシューターが遊びたいという人はいないと思いますが…
ああ、でも、昔こんなかんじの画面の縦スクロールシューティングゲームがあったなぁ…
SFCで、正確には縦スクロールだけじゃなかったんですが、『アクスレイ』ってコナミのゲーム。
縦スクロール面での地形との衝突判定がわかりにくかったんですよね。
それでも好きなゲームでしたが。
とにかく、使い道は限られると思いますが、こういうのもありですよ、という例でした。
このマテリアルファンクションはサンプルレベルと一緒にマテリアルコレクションに追加しています。
参考にしてみてください。