記事一覧

2015年12月11日金曜日

【Unreal Engine】デカールを使用して血しぶきを作成する

今回はデカールを使用して血しぶきを表現してみたいと思います。

デカールとは簡単に説明するとテクスチャやマテリアルを使用たシール的なものです。
そのシールを使って自分の作成したメッシュモデルにサビとか汚れを表現することも可能なのでUV展開してテクスチャを割り当てたんだけど、汚れや傷が欲しかったなぁとういう場合にも活用出来ます。

さて、今回は血しぶきという事で絵の具をこぼしてしまった時のような白黒のテクスチャを用意しました。

まず作成方法はベースカラーマップ、マスクマップ、ノーマルマップを用意します。

血の色合いがよくわからないのでRの値を取り敢えず1に設定しておき、用意したベースカラーマップをOnMinusで反転させてオパシティにつなぎます。
こうすることにより、白くなっているしぶきのアルファ抜きが可能になるので、血の透明度を表現できます。ちなみに1の時が不透明で、0の時が透明になります。

続いてマスクマップのRピンをラフネスにつなぎます。 今回のマスクマップではRピンにはラフネスマップ、Gピンにハイトマップの情報が埋こまれています。

ちなみにマスクマップに含まれるR情報が少ないですが、このぐらい散らばっていたほうが血の反射の均等性が無くなるので良いと思いました。

最後にノーマルマップで血の凹凸を擬似的に表現します。
ここらへんもパラメーター等で改良していくのもありです。



取り敢えずラフネス値だけをパラメーター化して血の粗さや反射具合をレベルで確認しながら調節していきます。
ちなみにマテリアルインスタンスはコンパイルの必要がないのでリアルタイムで表現が可能です。



実際に自分の作成したメッシュに貼り付けてみました。
スカイライトありだと血の色合いが薄まってしまい中々リアルに見えないですね・・・
それどころかノーマルマップでの凹凸とラフネスマップによる反射の効果も全然見られなく、ただ単にベースカラーマップを貼り付けただけの質感って感じになります。



こちらがスカイライトを排除し、ディレクションライトのみでライティングを行った結果。
擬似的な凹凸と、ラフネスによる表面の粗さはスカイライトの方よりかは表現できていると思います。
やはり、リアルな血しぶきに見せるためには色合いを補正したり、テクスチャが伸びきっているようにも見えるのでディティールマッピングを行う必要性が出てきますね。

2015年12月5日土曜日

【Unreal Engine】レベル内に配置してある梯子を登れるようにする処理

レベル内に配置してある梯子を対象のプレイヤーに登らせる処理をご紹介します。



①最初に、Maya等で作成した梯子のモデルを用意してレベル内に配置します。



②梯子アクタを選択してOnComponentBeginOverlapを用意し、対象のプレイヤーが梯子のCollistionに触れたら、Booloean型のIsMoveに値をセットします。

③Uキーを押したら、IsMoveがセットされている事を確認し、もしセットされていれば真の方にパルスを流します。

④GetPlayerpawnでプレイヤーの情報を取得し、更にGetActorLocationでアクタの位置情報を取得します。

⑤ ③で行った処理でパルスが流れてその先のノードがSetActorLocationなので位置情報を代入するので、ここではZ値の100がセットされます。

⑥更に梯子に登っている際はその位置を固定したいのでGravityScaleで無重力状態にするので0にします。

⑦最後にOnComponentEndOverlapで梯子Collistionからプレイヤーが離れたらisMoveの値が解除され、重力も1にしてデフォルトに戻るようにしました。




アニメーションがあるとよりリアルな動きを再現できますが、今回は無しで・・・
それと、今回はレベルブループリントで実装しましたが、本来であればクラスブループリントでやりたかったのですが、キー操作が反応しなかったためできませんでした。

解決法をご存知の方がいれば教えていただきたいです。

2015年12月4日金曜日

【Unreal Engine】Trigger内にプレイヤーが触れて かつ Eボタンを押すとMessageが表示される機能 

こんにちは、Unreal Xiです。

今回は、Trigger内にプレイヤーが触れて かつ Eボタンを押すとMessageがスクリーン上に表示される機能をご紹介いたします。

先に断っておきますが、クラスブループリントでこの処理がなぜかできなかったのでレベルブループリントで作成しました。
原因が分かり次第次第報告させていただきます。



早速プログラムを組みます。

まず初めに、Actor型のクラスブループリントを作成し、BoxTriggerを用意します。

次にビューポートにそのクラスブループリントを任意の場所に配置し、そのアクタを右クリックしてOnActorBeginOverlapとOnActorEndOverlapを用意してください。

恐らく選択と同時にレベルブループリントが用意されます。


OnActorBeginOverlapの処理を最初に行います。
今回はMP5_BP(プレイヤー)のキャストノードとButtonCollisionTriggerを繋げ、チェックを入れます。
こうすることにより、OnActorBeginOverlapにプレイヤーが触れた時にButtonCollisionTriggerに代入されます。

そして、その状態でEキーを押せばブランチでButtonCollisionTriggerが取得されてるかどうかを判断し、されていれば押されましたと表示されます。

最後にOnActorEndOverlapでCollistionからプレイヤーが出たら、ButtonCollisionTriggerが代入されなくなるようになります。




説明が下手ですみませんが、以上で終わりになります。
分からない点があれば、コメントにて教えてもらえると幸いです。

2015年10月26日月曜日

【Unreal Engine】メモ5(OnComponentBeginOverlapにおいて、敵のダメージ処理)

敵をレベル内に配置し、AIの作成に入る前に簡単なダメージ処理を作成してみました。

私自身UE4のブループリントの使い方はまだ慣れていませんが、自己流で作成してみたので宜しければ参考にしてみてください。


敵のCapsuleComponentに、何らかのアクタが触れた時にOnComponentBeginOverlapイベントを発生させます。

その処理内容は画像1の通りになります。


①敵のHPは10で、アクタが触れたら 10.0-1.0=9.0になり、変数のHPに9を代入します。

②もし、敵のHPが0.0じゃなかったら、残りの敵のHP数をキャストしてPrintStringで表示させます。

③0.0だった場合は Destroy Actorでレベルないから敵が消えます。
画像1 敵のダメージ処理



実際に弾を的に数発当ててみたら、画像2の左上に敵のHPが文字で表示されています。
画像2 実際に弾を当てる




せっかくfloat型を使用しているので、ダメージ数を0.23~3.10の間でランダムで処理させてみました。
画像3 floatrandomによる



2015年10月22日木曜日

【Unreal Engine】メモ4

WhilLoopについて・・・

とある参考書を読み進めながら勉強していくうちに、ちょっと躓いたのがWhilLoopです。

◆用語
・WhilLoop:条件と一致してれば繰り返し処理を行うノード




int型の変数num=6が素数か素数じゃないかを、画像1の処理の流れを自分なりにご説明いたします。

①イベントBeginPlayから実行パルスを最初に流して、WhilLoopノードが真なのでLoopBodyに処理が流れます。

②Countの変数に+1ずつ代入し、num=6と1を割った時の余りが0じゃなかったら偽のBooleanにパルスを流し、0だったら止める。

③Countとnumが等しかった場合、Booleanの実行パルスの方に処理が流れて、ブランチノードを通じて繰り返し処理を終了して、「OK」つまり素数と表示させる。
画像1 WhilLoop処理の例


説明がヘタクソで済みませんが、まぁ何回か見てると処理の流れが自然に頭の中に入ってきます。

【Unreal Engine】メモ3

ForLoopの基本的な使い方について学んだことをメモしていきたいと思います。



◆用語
ForLoop:繰り返し処理が行えるノードで、FistIndexに繰り返したいインデックス番号を整数で入力し、LastIndexでどこまで繰り返すかを定義する。その結果をLoopBodyから出力し、処理が全て終了すると、Completedノードに実行パルスを流す。また、Indexを出力することも可能。

Delayノード:前にも説明した通り、実行処理を遅らせることができるノード。 float型で秒数を指定できるようになっている。

Appendノード:2つの値を1つにまとめることができるノード。

ForEachLoop:配列の値を処理する事ができるノード。

LENGTHノード:配列の長さを取得するノード。




10回こんにちはと表示させて、処理が終了して1秒後にさようならと表示させるプログラム。
画像1 ForLoopの使用例1



Int型の変数Dataを作成し、5つのインデックスを作成してその中に値を代入。それをForEachLoopの繰り返し処理によって合計値の変数numに代入され続けて、処理が終了次第Completedから実行パルスを流し、num/Lengthを行って平均値を出力した。
画像2 ForLoopの使用例2



こちらのプログラムはdataの配列を繰り返し足し合わせて、numに代入して出力したもの。
画像3 ForLoopの使用例3





【Unreal Engine】メモ2

今回は2つの計算式の合計を比較し同じだったら○、間違いだったら✖というブループリントを作成してみました。

◆用語
・イベントBeginPlay:ゲーム開始時に実行される処理ノード
・変数:値を保管しておく為の入れ物
・Meke Literal Int:整数をその場で作成するノード
・PrintString:文字列を表示するノード
・ブランチ:真か偽を判断するためのノードでConditionにチェックを入れておくと真になり、外すと偽なる。


早速画像1を見てみましょう。
これだけ見せられても変数の値が何かわからないので、真か偽どちらか分からないと思います。

◆Int型の変数の値の詳細
・Coin1=10
・Coin2=2
・Coin3=100
・Coin4=5

これだったら、○か✖どちらに処理が行くのか明快です。

答えは○です

画像1: とある計算式の真偽処理



何故○なのか分からなかった人はコメント欄にメッセージ下さい。

2015年10月13日火曜日

【Unreal Engine】日記1

UE4の極本を本格的に始めてから3週間近くが経過しました。
進捗状況としては第25章のマテリアルに突入しましたが、何故かやる気がおきず1週間放置・・・

とまぁ、ぶっちゃけこの本では基本的なマテリアルの構造しか説明していないので、臨場感溢れる美麗なマテリアルを作成できるかと言われると無理な感じです。

ちなみに、10月7日に発売されたUE4のマテリアル本をこの前丸善で確認したところ、ページ数600ぐらいでマテリアル理論がぎっしり詰まっていましたΣ(゚д゚lll)

自分はこの本を来週ぐらいに購入して、11月から本格的に卒業制作で作成したモデルにマテリアルを割り当てていきたいと考えています。


画像1 制作しているステージのプロトタイプ



【Unreal Engine】メモ1

皆様こんばんは、UnrealXiです。今回はHUDの事について少しだけメモしていきます。


◆そもそも、HUD(ヘッドアップディスプレイ)とは何か?
・簡単にご説明させていただくと、3D上にウィジェットブループリントで作成したUI要素を重ねて画面上に表示するものです。


ちなみに私は、卒業制作でFPSゲームを制作していて、HUDで作成する体力ゲージ、弾丸数、レーダー、獲得アイテム個数などをHUDを使って画面上に表示させる事を目標にしています。



取り敢えず、ウィジェットデザイナーでcanvaspanelにvirtualboxとその中にtextを追加しました。
今回はTest_MAP2というレベルで作成したウィジェットを表示したいので、そのレベルブループリントを開き、イベントグラフで図1のようなものを組みました。

まず、イベントBeginePlayからウィジェット作成ノードで先程作成したウィジェットブループリントのクラスを選択し、それをDelayノードで1秒送らせて、ビューポートに表示させる処理を実装。
図1 作成したウィジェットをレベル内に表示させる処理




※ここでの注意事項
・UIの部品は、canvaspanel上に配置する。
・ウィジェットを表示させたいレベルでレベルブループリントを開いて編集する。


※ノードの説明
・イベントBeginePlay:ゲーム開始時に実行されるノード
・ウィジェットを作成:作成したウィジェットブループリントのクラスを指定し、使えるようにできる。
・Delayノード:実行する処理を秒数を指定し、遅らせることができる。
・Add to Viewport:レベル上にターゲットで繋いだコンポーネントを取得し、表示させる。


久しぶりの投稿であまり説明が上手くできませんでしたが、これからも記事を書き続けるのでよろしくお願いしますヽ(*´∀`)ノ





2015年9月19日土曜日

【Maya2016】歯車モデリング

皆さんこんばんは、Unreal xiです。
本日2回目の投稿になります!!!

現在のゲーム制作において、工場をテーマにしたステージ作りに励んでいます。
まずは、ステージのアセット作成から始めるわけですが、工場といっても色々なコンポーネントがあり、何から作成すればいいのか分からなかったので、取り合えず歯車モデリングをしてみました。



一応、完成です・・・


こんな感じで、ステージのどこかに配置したいと思います。

【Maya2016】手榴弾モデリング

皆様こんにちは、Unreal xiです。


久しぶりにMaya2016に触ってみて、簡単な手榴弾モデリングを作成しました。
作成時間は3つで約数十分ぐらいでした。 ※上の部分は複製ですけど(笑)



やはり、ワイヤフレーム付きシェーダーを適用すると見た目が良くなりますね。



取り敢えず完成したモデルは、現在制作しているゲームの中に入れて、一つのアセットとして扱いたいと思います。

2015年9月4日金曜日

【Maya2016】AWPモデリング3

度々すみません、本日3度目の投稿になります。

さぁ、AWPモデリングも終盤に入ってまいりました。
AWPモデリングpart2ではモデル全体をお店することがなかったので、今回は色々な角度からスクリーンショットを撮影してきました(´∀`*)



まずは、普通のメッシュ状態。
このモデルを見て、私的に明らかに2箇所直したほうがいい部分があります。
銃の名称はわかりませんが、引き金?の部分の周りが明らかに不自然です。(※実際のモデルを見た訳じゃありませんが、違和感があります。)
それと、その後ろの楕円のくぼみの部分。 これはもうちょっと改良の余地があると思うので暇なときに修正しておきます。



ワイヤフレーム付きシェーダーは下手なモデルでも見栄えが良くなるので本来であれば外した方がいいのですが、スムーズシェードで表示した場合、確認しづらい部分があります。



こんな感じですね・・・







レバーを追加してみました。
NURBSと普通の球体で基本モデルを作成し、ブーリアンで穴開けちゃいました(^_^;)
本当はブーリアン使いたくなかったんですが、他に方法が思いつきません。
エッジ追加して押し出してもいいですが、ちょっと問題あったので・・・
















実際にプレイする際にはこのように表示されると思います。

【Maya2016】AWPモデリング2

こんにちは、Unrealxiです。

前回のAWPモデリング1の続きになります。
取り敢えずこのブログでは、一つ一つ細かく説明するのではなく、ある程度できる人で、この部分はどうやって直したらいいのか? 等を中心に説明します。(※Maya歴2ヶ月の私が教えるので飽く迄参考程度にお願いします。



AWPモデルを作成してて一番難しいと感じた部分がこの楕円みたいな感じの部分ですね。
この部分よーく見ると、線がくっきり表示されてしまって非常に見栄えが悪いです。
せめてもう少しなめらかにしたいですね。 その際ソフトエッジ等を使用すると凸凹&黒くなってしまったりするので、今回はハードエッジで仕上げていきたいと思います。



初心者がやりそうなこととして、まず最初にフェースを選択し、スムーズをかければいいんじゃね?
遠思ってる方もいるかもしれませんが、その場合だと逆にモデルが崩壊している部分が出てきて、手直しが非常に面倒くさいです。

私が実施した方法はまず、エッジがくっきり見えているところに注目し、頂点モードに切り替えて、無駄な頂点が無いか調べます。
なかったら、エッジ同士の幅が小さい部分に注目し、どちらか一方を消してなめらかにしていきます。(※説明下手ですみません。)

一応こんな感じになりました。



皆さんは、このように穴があいていた場合はどのようにくっつけますか?
私だったら、中心にエッジが内部分にエッジをループして移行分割で、アペンドポリゴンかでくっつけてから、無駄なエッジ、頂点を削除し、形を整えます。



ブーリアンの罠。
使いすぎに注意してください。 ファイル事壊れる可能性があるので。(※自分は修復不可能になりました(苦笑))
ちなみに、ネジ周りの部分をブーリアンし、銃に少しだけ溝をつけたらこれになりました(^_^;)



以上で今回の説明を終了します。

【Maya2016】AWPモデリング1

久しぶりの投稿になります。 Unralxiです。
今回はAWPのモデリングを行ったので少しだけご紹介した思います。



まずはこのようにAWPをsideから見た画像を用意して、フォルムに沿ってラフモデルを作成します。



次にある程度の形になってきたら、左側の尻尾の部分から形を整えていきます。
この時、無駄なエッジ、ベベル、ブーリアンはモデル崩壊の原因になる恐れがあるので、極力控えてください。



スコープをくっつける部分もこのように作ります。
その際、黒く表示されている部分がありますが、これは法線が逆になっている可能性があるので、
法線方向の一致を実行したいところですが、もしかしたら反応しない場合があるので、一度その部分だけ抽出してから法線の反転を実行し、再度統合し直してください。



また、明るい緑色に表示される場合はburinシェーダーなどのマテリアルを割り当てれば解消されます。



スコープのラフモデルを制作する場合はスナイパー本体のサイズより少し小さめに作るのがポイントです。上面ビューなどで合わせてあげてください。



取り敢えず、スコープの形や細かい部分をイメージし、こんな感じになりました。





今日の説明はここまでになります。
Maya歴2ヶ月程度なので説明が至らない部分もあるので、不明な点はコメント欄にてお知らせください。

2015年8月22日土曜日

【Maya2016】MP5モデリング完成!?

皆さんこんばんは、unral xiです。

ついにMP5が完成!? しました。
何か納得の行かない部分も多数ありますが、初心者の私がこれ以上頑張ってもキリがないので、ある程度の日程制限をかけて作成しないと歯止めが利かないもので・・・



一応、ワイヤフレーム付きシェーダーで表示してみると形にはなってるかと思います。
ポリゴン数はおおよそ2万ぐらいで、ゲーム用としては不向きですね・・・汗



シェーダーのみの表示です。
これに、Quixel等でテクスチャとマテリアルを割り当てます。



色々な箇所をズームしてみました。







という感じで、MP5の作業は一旦ここまでにして、本格的にキャラ作りに入りたいと思います。
ただ、キャラ制作あまりやらないので、できるか超不安です・・・

2015年8月21日金曜日

【Maya2016】MP5モデリング仮完成

皆さんこんばんは、Unralxiです。

突然ですが、MP5の作成進捗状況についてお知らせいたします。
一応、MP5は仮完成という形にはなっているのですが、まだまだいたらない部分が多数見受けられるので、2日以内に力技で完成させていきたいと思います(笑)

ってか、この前気づいたんですが、ハイポリすぎてゲーム用のアセットとして使えないんじゃないかって疑問が浮かびました。

今後は、ラフモデルで作成して、テクスチャ&マテリアルで補おうかな。