豆知識的な技術共有
これ使って神ゲー作ってください
自己紹介
• 名前:平良 祐希
• 仕事:ゲームプログラマー3年目
• SNS:Twitter
• UE4歴:去年3月くらいから触ってます。
最近は少しご無沙汰気味。まだまだ初心者(の心を忘れない)
• 好き:VR・音ゲー・格ゲー・falcom・ゲーム開発・声優
• その他:第3回で喋りました
UE4でVR入門
最近やってること
注意
今回共有する方法が全てではない(と思う)ので「こっちのほうが
処理負荷かからないorきれいにできるんだけど?」な事案がある
かもしれませんが温かい目で見守っていてください。
また、スライドが後半になれば後半になるほど、不親切なスライ
ドになっているかもしれません。何かあれば発表後の質疑応答
(時間があれば)もしくは懇親会でお話しましょう。
(2週間で用意したから許して下さい!)
目次
• Render Target(Begin Draw Canvas to Render Target)
• Inverse Transform Location
• SplineMesh
RenderTarget
RenderTargetとは
UE4以外でテクスチャを作る場合、一般的にはPhotoshopやGIMP、
Substanceなどを使用する必要があります。
UE4にテクスチャ作成機能があると便利なときがあります。その
ときにRenderTargetを使ったりします。
右クリックメニューのマテリアル・テクスチャから描画ターゲットを選択す
ると、作成できます。
RenderTarget
今回紹介するのはこんな使い方
何をどうしているのか
作り方
まずは1枚真っ白なテクスチャを用意します。確認用なのでなくても構いません。
雪の材質となるマテリアルを作成します。
作成したらマテリアルの設定を変更します。
マテリアルの設定をします。テッセレーションの設定をしましょう。
D3D11TessellationModeをPNTriangles
CheckFreeDisplacementにチェック
MaxDisplacementを設定しましょう。
テッセレーション
テッセレーション (Tessellation) は、コンピュータグラフィックス
の画像演算手法の1つである。2次元画像上で3次元の複雑な立体
を表現するのために多数のポリゴン (polygon) が用いられるが、
テッセレーションはこのポリゴンメッシュをさらに分割して表現
することで、画像をより詳細かつ滑らかで現実感のあるものにす
る技術である。「テセレーション」とも表記される。(Wikipedia
引用)
右クリック
メニューか
ら作成
生成されたノード
の右クリックメ
ニューから選択
こんな感じでマテリアルを組みましょう
RenderTargetに書き込むためのマテリアルを用意します。
テクスチャはこんな感じのテクスチャを用意
ちなみにこんな感じのテクスチャを用意したら足跡みたいなのも作れます。
マテリアルの設定はMaterialDomainをSurfaceに
BlendModeはTranslucent
ShadingModelはUnlitにしましょう。
こんな感じでマテリアルを組みましょう
次にBPを作っていきます。StaticMeshActorを継承して作ります。
StaticMeshに、事前に用意した地面のモデル(ランドスケープで
作ってもOK)とMaterialsに先程作ったマテリアルを適用します。
この時、事前に用意したモデルの当たり判定が相当ひどいことになって
いる場合があります。今回はStaticMeshの設定で、地形と々当たり判定を
取るようにします。コリジョンのCollisionComplexityを
UseComplexCollisionAsSimpleに設定しましょう。
微豆ポイント
ConstractionScriptでレベルデザインを容易に!
UE4にはConstractionScriptというものがあります。
わかりやすく言うとEditor上でなにか操作をするとその処理が走
ります。これを使うことでレベルデザインがより一層、やりやす
くなるので駆使していきましょう。
今回は積雪量を調整します。
こんな感じで、積雪量を制御する処理をConstractionScriptに追加します。(押
下量のやつもかく
SnowOffsetはインスタンス編集可能にチェックします。
次にRenderTargetを更新していく処理。
まずは初期化します。
RenderTargetを更新するためのUV位置を取得します。
SupportUVFromHitResultsをOnにしましょう。
RenderTargetを更新する処理です。
完成!
ね?簡単でしょう?
いろいろやるとこんなのとか作れます。
InverseTransformLocation
こんな事ありませんか?
ミニマップを実装した!ミニマップのある地点をクリックorタッ
プor選択したらその場所に移動したい!
→マップの原点を0,0としてミニマップのここを0,0にして相対座標で・・・
めんどい
そこで活躍するのが
InverseTransformLocation
こんな感じで形は同じのサイズが違う2つのオブジェクトを用意します。
今回は左がメインマップ、右がミニマップとしましょう。
LineTraceであたったオブジェクトに対して判定を取ります。
ヒットした位置を両方のオブジェクトに関連付けるために、ヒットした位置(impact point)
を、逆行列でローカル座標にし、関連付けたいオブジェクトのTransformを掛けます。
この時逆行列の処理で役に立つのがinverseTransformLocationです。
逆行列
ゲームでは位置、回転、拡縮は行列で管理されています。
位置行列、回転行列、拡縮行列を掛けて出来た行列がワールド変
換行列です。
このワールド変換行列に逆行列を掛けてやると、ローカル座標に
位置合わせをすることが出来ます。
詳しくはこちら
逆行列のイメージとしてはこんな感じ
この処理で算出した位置にスフィアを出してみるとこんな感じになる
この処理で算出した位置にスフィアを出してみるとこんな感じになる
実はブログに書いてます。
逆行列についての備忘録
http://oneday-memorandum.hateblo.jp/entry/2017/07/16/221225
SplineMesh
こんなことが出来ます
作り方
実はコンポーネントがあります。
BPを作ってコンポーネントを追加しましょう
メッシュを設定します。メッシュは何でもOK
ConstractionScriptでレベルデザインを容易に!
略!
Splinemeshの形を作ろう!
SetStartandEndというノードがあります。
Tangentって何?
SetStartandEndノードの場合は、StartTangentの場合はStartPosから
どっち方向へメッシュを伸ばすかのベクトル。
EndTangentの場合はEndPosからどっち方向へメッシュを伸ばすか。
変数を作ります。Transform型とVector型をつくり
ましょう。
もっとレベルデザインを簡単に!
変数の詳細で、3Dウィジェットを表示にチェックを入れてみま
しょう!そうすると、見慣れないオブジェクトが出てきて、掴ん
で操作できるようになります!
BPを組んでいきます。まずは始点終点の決定
次にTangentの設定。Tangentは向きなので、
向きを算出します。
構造体はピンを分割することが出来ます。
こんな感じのConstractionScriptが出来たら観戦!
似たような名前のSplineというのもなかな
かできるやつです。(調べてみてね!)
ご清聴ありがとうございました。

第6回UE4勉強会in大阪