Posted at

UE4 過去にやったマテリアル・BPネタをまとめて公開

More than 1 year has passed since last update.

この記事はUnreal Engine 4 (UE4) Advent Calendar 2016の6日目の記事です。

いつもUE4で何かしらを再現しようとしてるkb10uyです。

今回投稿することにしたネタも端を発したのは再現ですでした。


CustomDepth/Stencil にしようとして断念したもの

といえばよくある使い方は大体メッシュのアウトライン生成ですが、もうちょっと複雑なことをしようとすると行き詰まるかもしれません。例えば/Left 4 Dead 2?/の見えない味方の輪郭みたいなエフェクトとか。

ハロウィン直前にこういうエフェクトをUE4でやろう!と思ってとりあえず↓のような感じのポストプロセスマテリアルを作成。





(腕と銃はCustomStencil #1に設定済み) Depthを使わずにStencilだけ使うという…

ただこのPPM、問題がありまして、法線情報はステンシルしてるアクターではなくカメラから最も近いアクターから参照してしまうので形はともかくフレネルの濃さがめちゃくちゃになってしまいます。

そこでCustomDepthのバッファがRしか使われてないのを良いことにRGBにCustomDepthに投入したジオメトリだけの法線、Aに従来のCustomDepthを入れれば良いんじゃね?と思ってエンジン改造しようとしましたがムリでした。主にマシンスペックの影響で。

一応ソースを確認した限りではそこまで複雑な改造はいらなさそうだったので、この説明だけでピンと来た方、ぜひ(他力本願


NEWスーパーフックマネキン

このツイートです。うっかりプロジェクトを削除してしまったのでUnreal Textを公開しようと思ったんですが無理です。

とはいってもやってることは単純で、フックした地点とプレイヤーアクターの間のベクトルを求めてAdd Forceしてるだけです。

早い話がma = -kxです。

NEWスーパーフックガールは名作フリゲですよ!


歩道のタイル

このツイートです。何とかしてCustomノードだけで再現したいなぁとか思ったらできました。

float sx = uv.x / (1.0 / tile.x) - 1;

float sy = uv.y / (1.0 / tile.y) - 1;
float hf = tile.x * freq.x;
float vf = tile.y * freq.y;
int x = 0, y = 0;

for(int i = sy; i < sy + 3; i++) {
float bl = 1.0 / tile.y * i;
float hw = bl - amp.x * sin(2 * 3.141592 * hf * uv.x);
if (abs(uv.y - hw) <= gthickness / 2.0) return float4(Groove.rgb, 0.0);
if (uv.y >= hw && uv.y < hw + bl) y = i;
}

for(int i = sx; i < sx + 3; i++) {
float bl = 1.0 / tile.x * i;
float vw = bl - amp.y * sin(2 * 3.141592 * hf * uv.y);
if (abs(uv.x - vw) <= gthickness / 2.0) return float4(Groove.rgb, 0.0);
if (uv.x >= vw && uv.x < vw + bl) x = i;
}

if ((x + (y % 2 ? 1 : 0)) & 1) {
return float4(Tile1.rgb, 1.0);
} else {
return float4(Tile2.rgb, 1.0);
}

各パラメーターの詳細をよく覚えてないのでツイートの画像を参照してください><


ポータルガン

このツイートです。別にやってることはそこまで複雑ではなくて、


  • オレンジのポータルと青のポータルを適当なBPに起こす

  • それぞれにScreenCapture、ポータルを出す板をセット

  • 発射時にはLineTraceで目線方向に伸ばした先のアクターの法線方向にポータルを展開

  • 片方に触れたらもう片方にワープ

ぐらいです。ポータルの奥に空間が広がるような描写にはエンジン改造が必要かと思われますが…


まとめ

やっぱりブループリントはすごいなぁとつくづく思うのでした。

皆さんもお気に入りのゲームの特徴的なシステムをUE4で再現すると新たな発見があるかもしれません。割とどうにかなるよ!!