UE4の勉強記録

UE4の勉強の記録です。個人用です。

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する Open WorldとPrologueの作成 Part 4

f:id:kazuhironagai77:20220306221245p:plain

<前文>

<ストレス発散とゲーム>

ゲーム制作の専門学校に通う生徒の中には勉強するのが苦手な人が結構いると聞いて、何週間か前のBlogで、その人達向けにどうやったら勉強を始める事が出来るのかについてまとめました。その時「ストレスがある一定以上あると勉強出来なくなるので、ストレスを勉強前に発散させておく必要があります。」と述べています。

それで気が付いたんですが、ゲームをPlayする人達の真の目的はストレス発散だったんです。普段、Gameをしない私はその時までその事に全く気が付きませんでした。

と言う事はストレス発散の本質を理解出来れば、Playして楽しいGameが作成出来きそうです。

これってかなり本質をついている気がします。

ので今週の前文では、このストレス発散とGameについて考察します。

<ストレス発散>

ストレスって定量化出来るのか知りません。心理学の世界ではひょっとするとエントロピーみたく完全に定量化出来ているのかも知れません。

調べました。

分かりませんでした。

分からないけど出来てなさそうです。

もしストレスが定量化出来ないとなると、どれくらいストレスが発散出来たのかも当然分かりません。

ストレス発散に関する記事を調べましたが、深呼吸するとストレス発散に役立つみたいな、全然役に立たなそうな情報しか見つかりませんでした。

一寸考えたら思いついたんですが「貴方のストレス発散方法」みたいなアンケート方式のTop 10だったら結構実践的な内容になってるかもしれません。

調べたらドンピシャでした。

大体以下の方法が有効なストレス発散方法でした。

  • おしゃべり(愚痴を聞いてもらう。)
  • 買い物
  • 趣味
  • 何かを創作する。(料理やDIYなど)
  • 寝る
  • 一人でボーとする
  • 運動
  • 食べ物(甘い物、美味しい物を食べる。お酒を飲む。)
  • 読書
  • 映画を見る
  • 音楽を聞く
  • ネットを見る
  • 旅行する
  • 歌う
  • 泣く、叫ぶ、笑う
  • ゲームをする
  • 掃除、整理整頓をする
  • 風呂に入る
  • 勉強

成程。中々納得出来る内容です。少なくとも深呼吸するとストレス発散に役立つみたいな話よりは実践的な内容です。

これを見て思ったのはストレスは発散するだけがストレスを解消する方法じゃないんだなと言う事です。

例えば、

  • おしゃべり(愚痴を聞いてもらう。)
  • 買い物
  • 歌う
  • 泣く、叫ぶ、笑う
  • 旅行する

は典型的なストレスを発散をしていますが、

  • 寝る
  • 一人でボーとする
  • 食べ物(甘い物、美味しい物を食べる。お酒を飲む。)

はストレスを発散するというより、ストレスに潰されてしまった心身の回復に重きをおいているように思えます。

  • 映画を見る
  • 音楽を聞く
  • ネットを見る
  • 趣味
  • 何かを創作する。(料理やDIYなど)
  • 掃除、整理整頓をする
  • ゲームをする

のように何かに没頭する事でもストレスは減らせるみたいですね。

これは発散させるというより自分の心がストレスの原因に捕らわれていて、更なるストレスをどんどん生産してしまうのを止める感じがします。

創作系の趣味はそれ自体が何かストレスの解消に繋がる面もありそうです。

まだ、この中には映画を見たり音楽を聞くような受動的なストレスの解消方法とゲームをしたり何かを創作するような能動的なストレスの解消方法があります。これらには解消されるストレスに違いがあるんでしょうか?

映画を見たり音楽を聞きたりするような受動的なストレスの解消方法は、没頭する事によるストレスの解消+先程のストレスに潰されてしまった心身の回復の効果もありそうです。

良く分からないのは

  • 運動
  • 勉強

です。この二つはストレスの原因になれど、ストレスの解消にはならない気がします。

敢えて考えれば、運動する事で将来の健康的な不安を取り除く事が出来、ストレスの発生を軽減させれているのかもしれません。勉強も同じかもしれません。勉強しているから自分には怠けている人が苦労する時に苦労しないで済むはず。と言う感情が生まれストレスの発生が軽減するのかもしれません。

整理します。

ストレスの解消方法には

  • ストレスそのものの発散
  • ストレスで傷ついた心身の回復
  • 何かに没頭する事でストレスを忘れる
  • ストレスの元となる原因の軽減

4種類が確認されました。

これ見て何で私がGameをするのが嫌いなのか良く分かりました。

Gameは「何かに没頭する事でストレスを忘れる。」事は出来ても「ストレスの元となる原因の軽減」には繋がりません。好きかどうかは分かりませんが、私が得意なのは勉強や運動で、こういう風にまとめると見事に私のストレス解消方法は「ストレスの元となる原因の軽減」を基にしています。

昔は読書が趣味でしたが、没頭すると言う感じではなくどちらかと言うと「ストレスで傷ついた心身の回復」が目的だった気がします。

中学生の頃の私は、上手く行かない現実と、自分の理想とのギャップがストレスの元でした。そんな時の私は、自分の理想通りに物事が進む小説の世界で、ストレスで傷ついた心身の回復を行っていた気がします。

そう言えば、なろう系という分野の小説はこのタイプのストレスの解消にぴったし当てはまっている気がします。

やっぱり人がお金を払っても見る物は、その効果は定量化出来なくても確実にストレスの解消につながっているんですね。

ストレスの解消方法をこの4パターンに分類して分析するのは、ストレスの解消を正しく考察するのに、かなり強力な武器になりそうです。

これは来週の前文でやる事にします。

その後で、ストレス発散出来るGameの考察を行う事にします。

それでは今週の勉強を始めます。

<本文>

1.今週の予定

今週も先週と大体、同じ内容でやっていきます。

  • Niagara: CGHOW氏のTutorialをやる
  • Material :Projectionの勉強の復習
  • Prologueの作成
  • Open Worldの検証
  • 他のMapの作成
  • Game Designポケモン+HxHの念能力( 戦闘システムの作成)
  • UE5:Lumenの勉強
  • Blenderの勉強

2.Niagara: CGHOW氏のTutorialをやる

折角Blenderの使用方法を勉強しているので、Mesh を使用してFXを作成しているTutorialを勉強しようと思います。

Book FX in UE4.27 Niagara Tutorial | Download Files [1] をやってみる事にしました。

f:id:kazuhironagai77:20220306221514p:plain

2.1 Book FX in UE4.27 Niagara Tutorial | Download Files [1] を軽く全部見る

以下に示したようなStatic Meshを使用しています。

f:id:kazuhironagai77:20220306221536p:plain

Pivot pointが特殊な位置にあります。

f:id:kazuhironagai77:20220306221557p:plain

更に厚みがありZが非常に小さいBoxとなっています。

これ作成出来るんでしょうか?

これが作成出来た上で、UEにImport出来ないとこのTutorialを進める事は出来ません。

更に舞っている花びらのTextureに以下に示した4x4の花びらの写真を使用しています。

f:id:kazuhironagai77:20220306221616p:plain

これはQuixelで探したら似たようなのありそうです。見つからない場合はこの部分はPassする事にします。

2.2 Blenderでモデルを作成する

取りあえず以下の3d modelを作成しました。

f:id:kazuhironagai77:20220306221649p:plain

Pivotの指定方法が分かりません。

Object Modeに戻ってみると既にPivotの位置が望んでいる場所にある気がします。

f:id:kazuhironagai77:20220306221709p:plain

これをUEにImportして確認してみます。

2.3 Blender fileをUEにImportする

これのやり方が分かりません。

確か、UEとBlenderは基本のUnitが100倍違ったはずでその調整を自分でするか、専用のAdd onをBlenderに入れて自動で調節してもらう必要があったはずです。

検索で見つかったTutorialにその事が載ってません。

良いTutorialを探していたら、公式のHomepageにDownload our new Blender addonsという記事があって

Blender上で作成した3d ModelをUE上で同時に確認出来るAdd onと

f:id:kazuhironagai77:20220306221746p:plain

Blender上でUEのRigを使用するAdd onの解説がありました。

f:id:kazuhironagai77:20220306221807p:plain

凄い。

早くこういうのが使える用に成りたいです。

今回は普通にExportしてUEからImportする事にします。

How To Export A Game Asset From Blender To Unreal Engine? [2] にBlenderからUEへの3d ModelのExportのやり方が載っていたのでそれをやってみます。

Parameterの設定ですが以下の2つだけで良いみたいです。

f:id:kazuhironagai77:20220306221828p:plain

サイズは変えなくて良いんでしょうか?

取りあえずやってみます。

これの設定のやり方が分かりません。

f:id:kazuhironagai77:20220306222039p:plain

取りあえずImport Allを押してみます。

普通に出来たみたいです。

f:id:kazuhironagai77:20220306222058p:plain

f:id:kazuhironagai77:20220306222109p:plain

Pivot Pointを確認したら以下の様になっていました。

f:id:kazuhironagai77:20220306222128p:plain

TutorialとXとYの軸の向きが逆です。

f:id:kazuhironagai77:20220306222149p:plain

Blender のEdit ModeでGeometryの向きを変えてみます。

f:id:kazuhironagai77:20220306222209p:plain

Exportの設定は同じです。

f:id:kazuhironagai77:20220306222228p:plain

以下の様になりました。

f:id:kazuhironagai77:20220306222252p:plain

Pivotの向きは同じになりましたが、厚みがありすぎます。

f:id:kazuhironagai77:20220306222319p:plain

薄くしました。

f:id:kazuhironagai77:20220306222342p:plain

今、気が付きましたがTutorialで使用されているMeshのUVが以下の様になっていました。

f:id:kazuhironagai77:20220306222401p:plain

因みに私のMeshのUV Mapは以下の様になっています。

f:id:kazuhironagai77:20220306222421p:plain

これはTutorialのMeshはUVの接点全てにVertexがあるんじゃないでしょうか?

Sub divide機能を使用してMeshを以下の様に分割しました。

f:id:kazuhironagai77:20220306222442p:plain

TutorialのUV mapとはちょっと形が違いますがこれ以上直し方は分かりません。

これで行きます。

Unreal にImportし直してUV Mapを見ると以下の様になっていました。

f:id:kazuhironagai77:20220306222502p:plain

これならいけそうです。

f:id:kazuhironagai77:20220306222527p:plain

2.4 Book FX in UE4.27 Niagara Tutorial | Download Files [1] をやる

それではTutorialをやっていきましょう。

<Materialの作成>

Previewに先程ImportしたMeshをセットします。

f:id:kazuhironagai77:20220306222558p:plain

TexCoord[0]でPreviewを見ると

f:id:kazuhironagai77:20220306222619p:plain

以下の様になりました。

f:id:kazuhironagai77:20220306222637p:plain

正しTutorialのは以下に示した様になっています。

f:id:kazuhironagai77:20220306222655p:plain

ああ。

そう言う事ですか。

もう一回Meshを作り直します。

f:id:kazuhironagai77:20220306222721p:plain

こういう感じになりました。

f:id:kazuhironagai77:20220306222743p:plain

これでやります。

f:id:kazuhironagai77:20220306222802p:plain

こんな感じです。

f:id:kazuhironagai77:20220306222822p:plain

Rotate About Axisノードを使用します。

f:id:kazuhironagai77:20220306222842p:plain

Rotate About Axisノードの使用方法がTutorialで丁寧に解説されていました。

以下に使用方法をまとめます。

f:id:kazuhironagai77:20220306222936p:plain

Normalize Rotation Axisですがどの軸に対して回転を掛けるのかについて聞いています。

今回はY軸に沿って回転を掛けるのでConstant Vector 3 (0,1,0) をつなげます。

次のRotation Angleは回転させる角度です。UEのMaterialはDefaultでは0.0 = 0度、1.0 = 360度です。

Objectの回転させる中心ですが同然、ObjectのPivotを指定します。Object Position WSノードを使用するとそのObjectのPositionをパスしてくれます。

最後のPositionですがAbsolute World Position をPassします。このMaterialを使用するObjectの全てのVertices の値がPositionに成る訳です。

Rotation Angleに以下の実装を追加します。

f:id:kazuhironagai77:20220306223019p:plain

すると以下の様にMeshが丸まります。

f:id:kazuhironagai77:20220306223049p:plain

私の場合です。

f:id:kazuhironagai77:20220306223112p:plain

うーん。

何かへんな形になってしまいました。

あ、分かりました。

Meshの下面の向きが逆でした。

f:id:kazuhironagai77:20220306223140p:plain

直します。

f:id:kazuhironagai77:20220306223159p:plain

惜しい。

枠の厚みの部分を無視していました。

UV Mapに戻って側面のX軸の厚みを0にセットしてみます。

f:id:kazuhironagai77:20220306223233p:plain

結果です。

f:id:kazuhironagai77:20220306223250p:plain

Tutorialのは外側が黒いですが私のは内側が黒いです。

f:id:kazuhironagai77:20220306223309p:plain

逆みたいです。

Planeで試しに作ってみたら、

f:id:kazuhironagai77:20220306223327p:plain

綺麗に出来ました。

f:id:kazuhironagai77:20220306223344p:plain

これでやる事にします。

Fountain Templateを追加した新しいNiagara Systemを作成します。

そしてNSを開いてRender SectionのSprite Rendererを消してMesh Rendererを追加します。

f:id:kazuhironagai77:20220306223402p:plain

更にMesh RendererのMeshesに先程作成したMesh をセットします。

f:id:kazuhironagai77:20220306223420p:plain

更にEnable Material OverrideにCheckを入れてOverrideするMaterialにM_PaperTestを追加します。

f:id:kazuhironagai77:20220306223443p:plain

こんな感じに成りました。

f:id:kazuhironagai77:20220306223504p:plain

要らないModuleを全部消します。

f:id:kazuhironagai77:20220306223524p:plain

Tutorial通りに消しましたが何でDrag Moduleは残っているんでしょうか?

Emitter Update SectionにSpawn Burst Instantaneous Moduleを追加して

f:id:kazuhironagai77:20220306223544p:plain

一枚だけページを生成します。

f:id:kazuhironagai77:20220306223603p:plain

Particle Update SectionにDynamic Material Parameter moduleを追加して

f:id:kazuhironagai77:20220306223621p:plain

Page Turnの値を弄ると

f:id:kazuhironagai77:20220306223641p:plain

こんな風にくるくるします。

f:id:kazuhironagai77:20220306223737g:plain

この動きがTutorialと全く同じなので、ここまでは正しく出来てるようです。

次にParticle Update SectionにUpdate Mesh Orientation Moduleを追加します。

f:id:kazuhironagai77:20220306223808p:plain

これは初めて使用するModuleです。後で機能を調べます。

f:id:kazuhironagai77:20220306223838p:plain

こんな結果になりました。

f:id:kazuhironagai77:20220306223925g:plain

これに先程のDynamic Material ParameterのPage Turn の値を組み合わせます。

f:id:kazuhironagai77:20220306224040p:plain

Page Turn の値は上記のようにページがめくれる途中でもっとも丸くなるようになっています。

f:id:kazuhironagai77:20220306224102g:plain

凄い!

今度はEmitter Update SectionのSpawn Burst Instantaneous Moduleを外してSpawn Rate Moduleを追加します。

f:id:kazuhironagai77:20220306224126p:plain

Spawn Rate Moduleの設定は以下のようにしました。

f:id:kazuhironagai77:20220306224144p:plain

結果です。

f:id:kazuhironagai77:20220306224212g:plain

もう凄いとしか言いようがないです。

どっから見ても本のページをめくっているようにしか見えません。

今度は両端のめくられていないページを作成します。

以下に示した部分です。

f:id:kazuhironagai77:20220306224237p:plain

PageをめくっているEffectをDuplicateして

f:id:kazuhironagai77:20220306224258p:plain

Particle Update SectionのUpdate Mesh Orientation Moduleを消してページが曲がらないようにします。

更にParticle Spawn SectionのSpawn Rate Moduleを消してSpawn Burst Instantaneous Moduleを追加し以下の設定にします。

f:id:kazuhironagai77:20220306224339p:plain

Particle Spawn SectionにParameterであるPositionをセットして

f:id:kazuhironagai77:20220306224431p:plain

その設定を以下に示したようにします。

f:id:kazuhironagai77:20220306224454p:plain

ここで厚みを出しています。

またPage毎にz軸方向にずらすためにDynamic InputであるReturn Normalized Exec Indexを使用しています。

更に、Emitter Update SectionのEmitter State Moduleの

f:id:kazuhironagai77:20220306224520p:plain

Loop Behaviorの値をOnceにして

f:id:kazuhironagai77:20220306224543p:plain

Meshが一度しか生成されないようにし、かつParticle Update SectionのParticle State Moduleの

f:id:kazuhironagai77:20220306224605p:plain

Kill Particle When Lifetime Has ElapsedのCheckを外して

f:id:kazuhironagai77:20220306224627p:plain

生成されたPageが消えないようにしています。

次は以下のPageが繋がっている箇所を直します。

f:id:kazuhironagai77:20220306224649p:plain

Particle Spawn SectionのSet Position Moduleの

f:id:kazuhironagai77:20220306224711p:plain

設定を

f:id:kazuhironagai77:20220306224734p:plain

とします。すると以下のようになります。

f:id:kazuhironagai77:20220306224756p:plain

読み終わったPageの分を作成します。

先程のめくられていないページを生成するEmitterをduplicateします。

f:id:kazuhironagai77:20220306224822p:plain

Particle Spawn SectionにInitial Mesh Orientation Moduleをセットします。

f:id:kazuhironagai77:20220306224842p:plain

以下の値をセットします。

f:id:kazuhironagai77:20220306224859p:plain

するとめくられたPageを積んだ部分が生成されます。

f:id:kazuhironagai77:20220306224919p:plain

全部を表示すると以下のようになります。

f:id:kazuhironagai77:20220306224950g:plain

もう凄いとしか言いようがないです。

この後は、花びらを散らす部分の作成になるので、今週はここまでとします。

3.Material : Projectionの勉強の復習

今週もProjectionの続きをやっていきます。

Triplanar Projection - Shader Graph Basics - Episode 28 [3] を復習します。

3.1 先週の復習

先週の以下の計算をすると出来る黒い部分が

f:id:kazuhironagai77:20220306225147p:plain

以下の黒い部分と完全に一致して

f:id:kazuhironagai77:20220306225206p:plain

最初の計算でこれを割ると以下に示した様に

f:id:kazuhironagai77:20220306225227p:plain

黒い影が全く無くなります。

この部分の理屈は一週間考えましたが分かりませんでした。

まあ、仕方ないです。

この部分の理屈は分からないまま次に行く事にします。

3.2 前の Triplanar Projection - Shader Graph Basics - Episode 28 [3]の勉強内容を復習する

2022-01-24のBlogで勉強していました。

書いてある内容を簡単にまとめると

  • 先週(2022-01-24Blogから見て)勉強したMaskTriplanar Projectionに必要な技術だった!
  • Maskの箇所にMask(GB)Mask(RB)を追加した。その意味について
  • 3つのProjectionBlend方法について

です。

<MaskがTriplanar Projectionに必要な技術だった!>

まあ。これは衝撃の事実だった訳で、これについて泡吹いて語っています。今はまあ、その事実が当たり前になってしまいました。

<Maskの箇所にMask(GB)とMask(RB)を追加した。その意味について>

これも今なら、当然の話で、歪んでいないZ軸方面のProjectionを作成したら、歪んでいないx軸とy軸のProjectionの作成も当然必要です。

<3つのProjectionのBlend方法について>

この部分は前の2つと違って全く記憶になかったです。しかしこの内容が今週の勉強の最も重要な内容の一つになる位大切な内容です。

Xyzぞれぞれの軸に沿ったProjectionとそのMaskは先週までの勉強で作成出来ます。その3つのProjectionをどうやって混ぜると歪みのない一個のProjectionになるかが問題です。

私は単に足したら良いと思っていました。

黒い部分の値はほぼ0なので単に足せば3つのProjection を合わせた一個のProjectionになります。

ところが、ここではLerpノードを使用して3つのProjectionを合わせています。

f:id:kazuhironagai77:20220306225338p:plain

実際の実装方法についても詳しくまとめられていて

f:id:kazuhironagai77:20220306225357p:plain

と書かれています。

この部分を読むとどうやってLerp ノードで2つのProjectionを合わせる事が出来るのかが理解出来ます。

3.3 Triplanar Projection - Shader Graph Basics - Episode 28 [3]を軽くみる

まず、一回Triplanar Projection - Shader Graph Basics - Episode 28 [3]を軽く見てみます。

あ。っと最初に思ったんですが、先週と使用しているTextureが違っています。先週は花柄で上下左右の区別がつくTextureだったんですが、今回使用しているのはコンクリート内に小石が混ざったかなりSeamlessなTextureです。

f:id:kazuhironagai77:20220306225419p:plain

やっぱりTri-Planar Projectionは、歪みは消せますが、3つのProjectionのつなぎ目が目立ってしまうと言う欠点がある技術である事は間違いないですね。

その欠点を隠すために敢えて比較的SeamlessになりやすいTextureを使用している訳です。

まあ、私のこの勉強の目的は綺麗で実用に使用出来るMaterialの作成方法を学ぶ事ではなく、実際にMaterialを実装するために必要な理論を学ぶ事が目的ですので、Tri-Planar Projectionの実用性がどの程度かに関してはどうでも良いです。

更に、こういう行為を誤魔化しと捉えるか、理解してもらいやすいようにした工夫と捉えるかは人によって違うでしょうし。まあ、こういう行為が無かったら遺伝学で有名なあのメンデルの法則も世に出る事は無かった事は、こういう行為を誤魔化しと捉える人達も認めるざる得ないでしょうが。

Tri-Planar Projectionに計算コストがあまり掛からないけど精度が低いやり方と、コストがかかるけど精度が高くなるやり方の2つがあると解説していました。

あ、思い出しました。

この2つの実装方法については2022-01-24のBlogでは記録が有りませんでした。今回の復習ではしっかり記録しておく事にします。

低コストのやり方が分かりました。

Texture SampleノードでTextureのDataを取り出しますが、この部分が遅くなる訳です。ので低コストのTri-planar ProjectionはTexture Sampleノードを使用する前に全部の計算を終わらします。

以下に示した様に、先程述べたLerp ノードを使用して3つのProjectionを合わせる実装をTexture Sampleノードを使用する前にやっています。

f:id:kazuhironagai77:20220306225442p:plain

しかし結果は

f:id:kazuhironagai77:20220306225459p:plain

3つのProjectionの接合部が歪んでいます。歪みを無くすためのTri-planar Projectionなのに歪みが出てしまっています。

うーん。

でもこの方法だと、Seamlessではあるみたいです。

これはこの方法は単に計算Costが低いだけじゃなくて別なMeritもありそうです。その辺も今回は検証します。

この後は高Costの実装方法についての解説をやるのかと思ったら、低コスト版の改良版についての実装方法の説明とその解説をしていました。

まず低コスト版の改良版ですが、Projectionの接合部で歪みが生じる理由は、Maskに使用している計算値が3つのProjectionの境界部でBlendしているからです。

f:id:kazuhironagai77:20220306225606p:plain

確かにBlendしています。以下に示した部分だと緑と青が混じっています。

f:id:kazuhironagai77:20220306225625p:plain

これをRound ノードで混じりを消すと

f:id:kazuhironagai77:20220306225639p:plain

以下の様になります。

f:id:kazuhironagai77:20220306225657p:plain

接合部を拡大しました。

f:id:kazuhironagai77:20220306225717p:plain

確かに歪みは無くなりましたが、seamlessじゃなくなってしまいました。

最後にTexture SampleノードからDataを取り出すのでSeamlessに成るのかと思ったんですが、なってませんね。

Tutorialでは、この後でPowerの値を8から64に変更しています。Powerの値を大きくするとBlendされている境界の幅が細くなるはずです。

既にRoundノードが入って、Blendされている境界の幅が細くなっているのに、更にPowerの値を変更する事に意味があるんでしょうか?

結果はこうなっています。

f:id:kazuhironagai77:20220306225749p:plain

うーん。良く分かりません。

この辺の実装する時に検討します。

<高コストの計算方法>

てっきりこのつなぎ目をもっとはっきりさせるのが高コストのTri-planar Projectionのやり方だと思っていたんですが、高コストはこの境界線の部分をBlendさせて見えなくするそうです。

うーん。

まだ、分かって無い部分がありますね。

やり方は低コストの解説で少ししたように先にTexture SampleでTextureの値を取ってからLerpノードで合わせます。

f:id:kazuhironagai77:20220306225813p:plain

結果です。

f:id:kazuhironagai77:20220306225901p:plain

あんまり変わってないです。

これは先程低コストの計算の改良版でMaskの計算でRound ノードを追加したり、Powerの値を8から64に変更してBlendしている部分を無くしたからです。

Tutorialでは別な説明をしていますが、私の説明の方が正しいです。実装する時もこの点については解説します。

Roundノードを外して、Powerの値を8に戻したら、以下に示した様にMaskのImageにBlendが戻りました。

f:id:kazuhironagai77:20220306225941p:plain

その結果、Projectionの境界線も以下の様になりました。

f:id:kazuhironagai77:20220306230002p:plain

残りはUEでの実装方法の解説でしたが、やっている事は同じでした。

3.4 Triplanar Projection - Shader Graph Basics - Episode 28 [3]を実装する

今回も見ないでやってみます。

流石に全部理解してるかは怪しいですが、出来る所まではやってみます。

<先週作成したDirectional Maskまで>

先週作成したDirectional Maskまで実装します。

Projection部分を作成しました。

f:id:kazuhironagai77:20220306230054p:plain

この部分の実装方法を忘れて先々週、作成したMaterialを見直しました。

先行き不安です。

Mask側の実装です。

f:id:kazuhironagai77:20220306230125p:plain

PowerしたらPreviewで出てる白い部分が消えるはずなのに消えませんでした。

何で?と先週に作成したMaterialで答えを見ましたが合っていました。よく見たらPowerのOutputをResult Nodeに繋いでいませんでした。

あー。調子良くないです。

最後に二つの結果を掛けて完成です。

f:id:kazuhironagai77:20220306230151p:plain

f:id:kazuhironagai77:20220306230200p:plain

<Tri-planar low cost版>

Tri-planarのLow Cost版を作成します。

f:id:kazuhironagai77:20220306230222p:plain

f:id:kazuhironagai77:20220306230231p:plain

出来ました。

Lerpノードを使用したProjectionの合わせ方ですが、Maskの黒い部分に当たるProjectionをA、白い部分に当たるProjectionをBにセットすればどんな組み合わせでも良いみたいです。

<Tri-planar low costの改良版>

まずRound ノードのみを試してみます。

f:id:kazuhironagai77:20220306230256p:plain

歪みは無くなりましたが、Seamlessではなくなりました。

f:id:kazuhironagai77:20220306230318p:plain

今度はRound ノードを外してMaskのPowerのExpの値を64まで上げてみました。

f:id:kazuhironagai77:20220306230334p:plain

結果です。

f:id:kazuhironagai77:20220306230351p:plain

むー。

Roundノードがないと歪みは完全には消えないんですね。

f:id:kazuhironagai77:20220306230415p:plain

Round ノードが歪みそのものを消すならPowerのExpの値が8でも20でも64でも関係ない気がします。

確認します。

PowerのExpの値が8の時です。

f:id:kazuhironagai77:20220306230446p:plain

PowerのExpの値が64の時です。

f:id:kazuhironagai77:20220306230506p:plain

変わってないです。

<Tri-planar の高cost版>

高cost版を作成する前に、Roundノードは外しておきます。高Cost版はBlendしている部分を混ぜるのが特徴なのにBlendする部分を外すRoundノードがあると効果が確認出来ないからです。

Texture SampleをLerpノードの前に持ってきました。

f:id:kazuhironagai77:20220306230534p:plain

結果です。

f:id:kazuhironagai77:20220306230549p:plain

結構Blendしていますね。線は見えなくなりました。

全体像です。

f:id:kazuhironagai77:20220306230627p:plain

MaskのPowerのExpの値を32にしてみます。

f:id:kazuhironagai77:20220306230643p:plain

これだど、前の方がマシですね。

MaskのPowerのExpの値を48にしてみます。

f:id:kazuhironagai77:20220306230700p:plain

うーん。あんまり変わりません。

Textureのサイズを半分にしてみました。

f:id:kazuhironagai77:20220306230716p:plain

結果です。

f:id:kazuhironagai77:20220306230735p:plain

Tri-planarが3つのProjectionをおこなう以上その3つのProjection同士のつなぎ目に不自然さが出るのは避けられません。

どの不自然さなら許容範囲なのかは使用しているTextureの種類によるでしょうね。

私が今回使用したようなTextureならTri-planar low costの改良版のような切れ目がはっきり見えてるのが良いかもしれません。

石のTextureなんかはBlendした方が自然に見えるのでTri-planar の高cost版の方が良いでしょうね。

実装方法に関しては特に疑問はありませんでした。

4. Prologueの作成

4.1 Power Point感が強すぎる

余りにもPower Pointが強すぎるので別な方法でPrologueを作成出来ないか検討してみました。

<Materialにしてみた>

f:id:kazuhironagai77:20220306230814p:plain

TextureをMaterialにして配置してみました。

金属のボールにTextureを貼り付けたのがかなり良い感じです。

ボールを転がしながらTextureが常に画面を見ていたら、見栄えがあるPrologueになるかもしれません。

良く考えたらView, World, Object, & Tangent Space - Shader Graph Basics - Episode 10 [4]で

f:id:kazuhironagai77:20220306230845p:plain

Textureが常に画面を向くための実装方法を習っていました。

f:id:kazuhironagai77:20220306230906g:plain

球が回っている感が無くなって見ていて気持ち悪くなります。

2種類のBaseを混ぜる事で球が回転している事が表現出来るようにしました。

f:id:kazuhironagai77:20220306230937p:plain

結果です。

f:id:kazuhironagai77:20220306231000g:plain

カメラをボールを追うようにセットしようと思ったんですがやり方がわかりません。

こういうふとした時に、「あれ何でこんな簡単な事知らないの」となります。

まだ勉強が足りないんでしょうね。

コツコツやっていくしかないですね。

良く分からないのでRolling TemplateのBallにこのMaterialを貼り付けてテストしてみます。

f:id:kazuhironagai77:20220306231028p:plain

以下に実装部を示します。

f:id:kazuhironagai77:20220306231045p:plain

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

f:id:kazuhironagai77:20220306231144g:plain

ボールが転がっているのは認識出来るので気持ち悪くはならないですが、おばあちゃんの画像が乱れて見にくくなっています。

LerpノードのAlphaの値を、以下の実装で

f:id:kazuhironagai77:20220306231236p:plain

としてみました。

f:id:kazuhironagai77:20220306231256p:plain

この黒い部分におばあちゃんを投影します。

結果です。

f:id:kazuhironagai77:20220306231328g:plain

後ろの映像に関係なくボールの移動が速くなるとおばあちゃんのImageが荒くなります。

だったら最初の方が良いです。

f:id:kazuhironagai77:20220306231356g:plain

ゆっくり動かして見ました。

少しはマシですがやっぱり映像がブレます。

うーん。望んでいたようには動きませんね。

理由が分かりました。

ある角度になると以下に示した様にTextureのImageが波を打ったように歪みます。

f:id:kazuhironagai77:20220306231424p:plain

これがボールが回転している時に映像がブレる原因です。

この辺の細かい調整は全部の形が整ってから考えます。

<Low Polyで作成する>

家や木、神社などをLow Polyで作成するのもありかもしれません。

4.2 電車の製作の続きをやる

これは来週やります。

5. Open Worldの検証

5.1 Open Worldの検証と他のMapの作成でやる内容の復習

先週まとめましたが以下の事をやっていきます。

f:id:kazuhironagai77:20220306231514p:plain

5.2 Landscape Grass Outputノードについて

f:id:kazuhironagai77:20220306231538p:plain

先週のLayer Blendノードの復習でProcedural Foliage Toolの機能の中で良く分かっていないのは、Landscape Grass Outputノードの使用方法だけになりました。

実際は大体の使用方法は理解していますが、きっちり勉強して100%全部理解します。

以下の内容はLandscape Grass | 5-Minute Materials [UE4] [5]の情報を元にまとめました。

設定は以下の様になっています。

f:id:kazuhironagai77:20220306231558p:plain

まず、Nameですがこれは何でも良いそうです。

Grass Typeですが、

f:id:kazuhironagai77:20220306231644p:plain

を使用します。

f:id:kazuhironagai77:20220306231702p:plain

この中でProceduralに生成する草のMeshを指定します。

f:id:kazuhironagai77:20220306231718p:plain

その他の設定は読めば理解出来ます。

次にどのLayerに指定したMeshを生成するかの指定を行います。

それはLandscape Layer Sampleで行います。

f:id:kazuhironagai77:20220306231737p:plain

f:id:kazuhironagai77:20220306231747p:plain

Parameter NameにLayerの名前をセットします。

f:id:kazuhironagai77:20220306231816p:plain

Preview Weightは良く分かりません。Layerと同じ値にしないといけないのかそれとも関係ないのか?

何も弄っていませんが今の所、上手くいっています。

Landscape Grass | 5-Minute Materials [UE4] [5]にLandscape Layer Sampleが上手くいっているのかどうかを確認する方法が紹介されていました。

以下に示したようにLandscape Layer Sampleを直接Base Colorに繋ぐと

f:id:kazuhironagai77:20220306231837p:plain

Layerの部分が白く表示されるようになります。

f:id:kazuhironagai77:20220306231856p:plain

元のLandscapeです。

f:id:kazuhironagai77:20220306231917p:plain

緑の部分がGrass のLayerです。

Landscape Grass | 5-Minute Materials [UE4] [5]で言っていましたが、Procedural Foliage Toolで生成されたMeshはCollisionがありません。Collisionが必要な木などを生成する時は、Foliageから手動でPaintする必要があります。

あるLayerにだけ木のStatic MeshをFoliageする方法がLandscape Grass | 5-Minute Materials [UE4] [5]で紹介されていました。後で勉強します。

5.3 Procedural Foliage Tool Quick Start [6] を勉強する

公式のDocumentであるProcedural Foliage Tool Quick Start [6]を勉強します。

f:id:kazuhironagai77:20220306231950p:plain

木はProcedural Foliage Toolで作成するとCollusionが無くなるのであまりお勧め出来ないと聞いています。そのへんのの整合性も含めて勉強したいです。

このTutorialで使用するOpen World Demo Collectionは

f:id:kazuhironagai77:20220306232014p:plain

4.25までしかSupportしていないので4.24でずっと前に作成したProject、Test Environmentsで作成します。

<Prerequisites

Edit Preferenceを開きProcedural FoliageにCheckを入れます。

f:id:kazuhironagai77:20220306232033p:plain

Open World Demo CollectionのDataは何故か既にこのProjectに入っていました。

<1 - Creating Foliage Type Actors

Landscapeを作成します。

f:id:kazuhironagai77:20220306232303p:plain

設定はそのままです。

Procedural Foliage Spawnerを作成します。

f:id:kazuhironagai77:20220306232326p:plain

これは始めて使用します。

f:id:kazuhironagai77:20220306232344p:plain

Tutorialの指示に従って作成したProcedural FoliageをLevel上に配置します。

f:id:kazuhironagai77:20220306232403p:plain

今度はStatic Mesh Foliageを作成します。

f:id:kazuhironagai77:20220306232421p:plain

名前はTree_00 と名付けます。

f:id:kazuhironagai77:20220306232442p:plain

<2 - Telling the Spawner What to Spawn

Foliage Type Actorsのセットをしていきます。

Procedural Foliageを開くと以下の様になっています。

f:id:kazuhironagai77:20220306232502p:plain

Foliage Type Objectに先程作成したStatic Mesh Foliageをセットします。

f:id:kazuhironagai77:20220306232517p:plain

Static Mesh Foliageを開いてOpen World Demo CollectionのHillTree_02 Static Meshを追加しようとしたら

f:id:kazuhironagai77:20220306232551p:plain

ずっと読み込んでいて先に進みません。

別なTreeをセットしました。

f:id:kazuhironagai77:20220306232605p:plain

Level上に戻り、配置した

f:id:kazuhironagai77:20220306232700p:plain

PFS_ExampleのResimulateボタンを押します。

f:id:kazuhironagai77:20220306232834p:plain

以下の様になりました。

f:id:kazuhironagai77:20220306232855p:plain

<3 - Tweaking Foliage Type Object Properties

この場合のTweakingは微調整と言う意味です。

Tree_00 を開いて

f:id:kazuhironagai77:20220306232920p:plain

以下の部分の設定を変更します。

f:id:kazuhironagai77:20220306232939p:plain

f:id:kazuhironagai77:20220306232947p:plain

f:id:kazuhironagai77:20220306232959p:plain

すると

f:id:kazuhironagai77:20220306233019p:plain

となりました。

うーん。

それぞれのParameterの役割は分からないですね。

それよりも確認したい事はこの方法で生成された木はCollusion出来るようになるのかどうかです。

f:id:kazuhironagai77:20220306233040p:plain

出来ないですね。

はい。

出来ないのが判明した以上、このやり方は採用出来ないのでこのTutorialの勉強はここまでとします。

一応、残りの部分も読みましたが、Collusionが出来る様になる方法は紹介されていませんでした。

6. World MachineUser Guide [7]の勉強

今週からWorld Machineの勉強も独立した節にまとめる事にしました。

正直「このSoftは勉強したけど何言ってるのか分かりません。」で終わりにしようと思っていたんですが、User Guideが思いのほか、分かり易いんで継続して勉強する事にしました。

6.1 先週までの復習

何で「Blenderは毎回復習してWorld Machineは復習しないの?」と聞かれたら理由は面倒だからです。でもやらないと訳わからなくなるのは確実なので今週から復習もする事にします。

2022-02-21Blog

World Machinに関する箇所を全部、読み直しました。

ほとんどが名称についてで、特に忘れている所はないみたいです。流石にBlenderと比較したら操作するのに覚える内容は一寸だけでした。

2022-02-28のBlog

Render Extentについてです。

User GuideのRender Extents and Project Setupを勉強したんですが、分からんの連発で読んでいて一寸もう少し考えて何か試したりして理解を深めたらと思ってしまいます。

まあ、最初の一回目の勉強だからショウガナイかもしれませんが。

6.2 Leftside View [8]の勉強

今週は以下の部分の勉強です。

f:id:kazuhironagai77:20220306233135p:plain

以下の部分からです。

f:id:kazuhironagai77:20220306233154p:plain

render extentの名前が表示されています。

その下に表示されているのが今みているDeviceの名前です。

f:id:kazuhironagai77:20220306233212p:plain

Preview画面上をDragする事でLightの向きを変更出来ます。

f:id:kazuhironagai77:20220306233228p:plain

カメラの部分には以下の機能があります。

f:id:kazuhironagai77:20220306233248p:plain

カメラの反対側の3つのボタンはGlobal View Togglesです。

f:id:kazuhironagai77:20220306233307p:plain

Lighting無しです。

f:id:kazuhironagai77:20220306233323p:plain

Material無しです。

f:id:kazuhironagai77:20220306233340p:plain

最後の海は作成していないのでボタンを押しても変化しません。

<Display Guides

以下の部分です。

f:id:kazuhironagai77:20220306233402p:plain

Pro版にはTile Overlayと言う機能が付くそうです。

Sea levelは文字通り海の高さでしょう。

f:id:kazuhironagai77:20220306233435p:plain

こんな感じです。

Tracingですが、これの使い方は分からないです。後で必要になった時に勉強します。

Contour Linesです。

f:id:kazuhironagai77:20220306233502p:plain

日本語でいう所の等高線ですね。

<Devices

f:id:kazuhironagai77:20220306233525p:plain

全ての使用しているDeviceが表示されています。

試しにShapes Deviceを配置したら

f:id:kazuhironagai77:20220306233545p:plain

Shapeが追加されました。

f:id:kazuhironagai77:20220306233756p:plain

以下の部分の機能についてです。

f:id:kazuhironagai77:20220306233815p:plain

Editボタンを押すと

f:id:kazuhironagai77:20220306233837p:plain

選択しているDeviceのPropertyが開きます。

f:id:kazuhironagai77:20220306233851p:plain

現在はCurve Deviceを選択しているのでCurveのPropertiesが開きます。

次のボタンはSet Resolutionです。

f:id:kazuhironagai77:20220306233915p:plain

f:id:kazuhironagai77:20220306233920p:plain

一応1025 Pxより大きくする事も出来ます。

こんな感じで変化します。

f:id:kazuhironagai77:20220306233941p:plain

f:id:kazuhironagai77:20220306233958p:plain

Set nameです。

f:id:kazuhironagai77:20220306234017p:plain

f:id:kazuhironagai77:20220306234023p:plain

Deviceの名前を変更出来るそうです。

Lock Previewです。

f:id:kazuhironagai77:20220306234040p:plain

やっとこの使用方法が判明しました。

Advanced Perlin Deviceを選択した状態でLockをしました。

f:id:kazuhironagai77:20220306234055p:plain

PreviewがAdvanced Perlinになっています。

f:id:kazuhironagai77:20220306234111p:plain

次のCurve Deviceを選択します。

f:id:kazuhironagai77:20220306234127p:plain

しかしPreviewはAdvanced Perlinのままです。

f:id:kazuhironagai77:20220306234148p:plain

これがLockの意味でした。

History

今までのActionが全て記録されています。

f:id:kazuhironagai77:20220306234238p:plain

クリックする事でそのActionまで戻る事が出来ます。

<Project Snapshots

f:id:kazuhironagai77:20220306234300p:plain

この機能を使用する事で何個ものWorldをSave出来るそうです。私はまだ一回もSaveした事がないのでこの機能にお世話になるのはずっと後になりそうです。

7. 他のMapの作成と前回のLandscapeの作成の復習

7.1 雪山の作成

試しにLandscapeを自作してみます。

前回作成したLandscapeの設定が2021-03-22のBlogに載っていました。

f:id:kazuhironagai77:20220306234338p:plain

これと同じサイズのLandscapeを作成します。

f:id:kazuhironagai77:20220306234356p:plain

このMapの右上の部分を作成します。

f:id:kazuhironagai77:20220306234413p:plain

こんな感じです。

山を追加しました。

f:id:kazuhironagai77:20220306234430p:plain

川の作成方法は忘れてしまったので、川は無しです。

これにWinter Forest Setの雪山のMaterialを使用します。

f:id:kazuhironagai77:20220306234451p:plain

こんな感じです。

f:id:kazuhironagai77:20220306234508p:plain

+を押してLayerを作成します。

f:id:kazuhironagai77:20220306234614p:plain

最後のRootsが

f:id:kazuhironagai77:20220306234638p:plain

LB Height BlendなのでNo Weight-Blendを選択したんですが

f:id:kazuhironagai77:20220306234700p:plain

合っているのか分かりません。確認します。

違ってました。

普通のWeight-Blendを使用していました。

直そうとしましたが、直せません。

取りあえずこのままやります。

Layerで塗ってみました。

f:id:kazuhironagai77:20220306234725p:plain

Macro varianceは全く聞いていませんね。

Play画面はこんな感じです。

f:id:kazuhironagai77:20220306234756p:plain

これはそれなりに見れます。

ただし近づくとTile感が凄いです。

f:id:kazuhironagai77:20220306234818p:plain

雪山のTile感も凄いです。

f:id:kazuhironagai77:20220306234846p:plain

これでは、Winter Forest Setの雪山のMaterialは使用出来ませんね。

Materialから作成する必要があります。

来週から雪山用のMaterialを作成する事にします。

7.2 World Aligned Blendノードについて

f:id:kazuhironagai77:20220306234912p:plain

World Aligned Blendノードについて調べていたら、Ben Cloward 先生のTutorialが出て来ました。World-Aligned Textures - UE4 Materials 101 - Episode 22 [9]です。

これを軽くですが見てみます。

World-Aligned Textures - UE4 Materials 101 - Episode 22 [9]を見る>

これはTri-planar Projectionの応用技みたいな方法で大変重要な内容ですが、World Aligned Blendノードと同じ事を述べているのか不明なのでSkipします。Materialの勉強で後でこれはしっかりやる事にします。

*後述。これはWorld Aligned TextureノードについてのTutorialWorld Aligned Blendノードとは別のノードでした

2021-04-04のBlog内のLandscapeの作成で、World Aligned Blendノードが出て来ます。

f:id:kazuhironagai77:20220306234940p:plain

これはその前の週の2021-03-28のBlogHow to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [10] を勉強していてその続きと書いてあるのでHow to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [10]の中でこの関数が使用されているはずです。

探して見ます。

How to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [10]を見る>

これ見たらこのTutorialじゃなくてその次のTutorial、How to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [11]でWorld Aligned Blendノードが使用されていました。

How to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [11]を見る>

以下の様な設定でMaterialを実装して

f:id:kazuhironagai77:20220306235006p:plain

そのMaterialをLandscapeとして使用すると

f:id:kazuhironagai77:20220306235040p:plain

こんな感じである程度以上の崖を色分けしてくれます。

この機能を使用して崖を自動で塗り分けます。

ただ実際の使用方法はWorld Aligned Blendノード以外にも沢山のノードを使用していました。のでその詳細に関しては来週やる事にします。

7.3 World Compositionの復習について

当然ですが、Landscapeの作成が完成するまではWorld Compositionの復習はお預けです。のでしばらくした後でやる事にします。

8. Game DesignポケモンHxHの念能力( 戦闘システムの作成)

8.1 戦闘システムの改良

一週間、戦闘システムについて考えた結果、以下の様な順番で戦闘を行うのがベストとなりました。

  1. 先攻の魔術師が魔法を選択
  2. 先攻の魔術師が選択した魔法を使用。
  3. 先攻のMonsterが攻撃。
  4. 後攻の魔術師が魔法を選択。
  5. 後攻の魔術師が選択した魔法を使用。
  6. 後攻のMonsterが攻撃。

ただこれだと魔法を使用した結果は分かり易くなりますが、その分、戦闘前に戦闘の結果の予測も出来る様になってしまい、HxHの念能力のような戦闘中における戦局の変化が無くなってしまいます。

となると今の戦闘システムの方が戦闘中に頑張る事で戦局を変化させる事が出来るので、今の戦闘システムの方が面白いかもしれません。

これは実際にゲームをPlayして確認するしかないです。

8.2 召喚出来るMonsterの種類を最弱の妖精族に限定してテスト

します。

f:id:kazuhironagai77:20220306235140p:plain

f:id:kazuhironagai77:20220306235148p:plain

そしてこちらの魔術師の召喚出来るMonsterの種類も最弱の妖精族に限定して戦闘してみます。

f:id:kazuhironagai77:20220306235212p:plain

3回程戦って見ましたが、全勝でした。

Monsterのタイプが全部、ジャンケンで負ける確率は1/9ですか。その時も戦闘に勝てるのかも試してみます。

f:id:kazuhironagai77:20220306235232p:plain

2回程、この条件で戦って見ましたがギリ負けます。

ジャンケンに全負した場合は勝つのは無理ですね。

<2勝1分けの時は?>

最後の最後で先攻を取った方が勝ちになるのに、必ず負けます。

5回戦いましたが5回負けました。

こんなのオカシイです。

Random 関数がおかしい気がします。

f:id:kazuhironagai77:20220306235302p:plain

Random値の生成ってSeedが同じだと同じ数字が繰り返し生成されるんでしたっけ。

調べます。

f:id:kazuhironagai77:20220306235319p:plain

5回連続でprintします。

f:id:kazuhironagai77:20220306235335p:plain

f:id:kazuhironagai77:20220306235344p:plain

f:id:kazuhironagai77:20220306235350p:plain

うーん。全然違いますね。

何故、勝てない。

もう一回戦います。

分かりました。2回連続で先攻を取らないと勝てません。

<2勝1敗の時は?>

流石にこれは勝ちました。

8.3 召喚出来るMonsterの種類を最弱の妖精族+亡霊族一体に限定してテスト

こういう条件です。

f:id:kazuhironagai77:20220306235421p:plain

一体だけ亡霊族が出てかつジャンケンで勝っている場合は大体勝ちます。

f:id:kazuhironagai77:20220306235440p:plain

亡霊族が2体出て来た時はどうやっても勝てません。

f:id:kazuhironagai77:20220306235457p:plain

逆に妖精族しか出てこない時は、魔法を使用する必要がないです。

f:id:kazuhironagai77:20220306235518p:plain

8.4 対戦した感想

そこそこは面白かったですが、改良点や問題点も判明しました。

  • 1面、2面を作って対戦相手の使用するMonsterの種類に制限を加えるともっと面白くなりそう。
  • 戦闘に勝ったら褒美が貰えるようにする。
  • 魔法は使用する必要が無い時は使用しないで良いようにする。MPがあると魔法を使わないようにする事による利益も出るのでMPの要素があった方が良い気がする。
  • 画面が見にくい。戦闘中どのMonsterが戦っているのか分かりにくい。
  • Monsterが一体でも死んだら戦闘終了は面白い。このIdeaはそのまま使用すべき!

簡単に解説します。

<1面、2面を作って対戦相手の使用するMonsterの種類に制限を加える>

そのままです。一面で最初の戦闘、勝つと2面に移動、3面まで勝つと報酬、みたいにします。

一面では、魔法を正しく使用しないと負けますが、魔法を正しく使用すれば勝つような強さに設定します。

2面では、更に相手のタイプとこちらのタイプを考慮して戦う必要があります。

こんな感じで、それぞれの面で課題があり、課題を克服すると戦闘に勝利して次の面に移動出来るようになります。

<戦闘に勝ったら褒美が貰えるようにする>

褒美が貰える事自体の説明は要りませんが、どんな報酬が貰えるのかについては考える必要があります。回復魔法は現在300HP回復させます。これを15%Upさせる薬とか、別な魔法を覚える巻物とかになるんでしょうか?

<魔法の使用に対しての制限>

最初の戦闘なんかは条件によっては魔法を使用しない選択もあるかもしれません。そうなった時、魔法を使用しない事によるメリットがほしいです。

MPを設定するのは有りな気がします。こんな所で独創的なIdeaを出す必要もなりでしょうし。

後、考えたのが攻撃力2倍の魔法の実装です。勝つのが分かっている戦闘はなるべく早く終わせたいからです。

<画面が見にくい。戦闘中どのMonsterが戦っているのか分かりにくい。>

これはUIの問題ですが、結構見にくいです。

どこから直したら良いのか分かりません。

<Monsterが一体でも死んだら戦闘終了>

これは意外でしたが、凄い分かり易い設定でした。しかも面白さを阻害しません。

8.5 Playした結論

Gameのシステムは変えない事にしました。

次に作成するのは、攻撃力を2倍にする魔法です。

その後で、1面、2面などのシステムで敵の召喚出来るMonsterに制約をつけるシステムを作成します。

8.6 戦闘力を2倍にする魔法

これは簡単そうなので今作成してしまいます。

W_PlayerMakeDecisionウィジェット

f:id:kazuhironagai77:20220306235648p:plain

攻撃力2倍のボタンを作成します。

f:id:kazuhironagai77:20220306235704p:plain

攻撃力2倍のボタンを押すとGame Modeの変数、Player Magic NameにDoubleがセットされます。

f:id:kazuhironagai77:20220306235721p:plain

今度はLevel BP上で

f:id:kazuhironagai77:20220306235749p:plain

強化魔法がコメント欄にセットされ

関数、Double Attack Pointが呼ばれます。

f:id:kazuhironagai77:20220306235811p:plain

この関数内では指定されたMonsterの攻撃力を2倍にします。

f:id:kazuhironagai77:20220306235832p:plain

Playerの攻撃のターンが終わると攻撃力2倍を唱えた時はReturn Normal Attack Point関数が呼ばれます。

f:id:kazuhironagai77:20220306235852p:plain

以下に示した様に攻撃力が2倍になったMonsterの攻撃力が基に戻ります。

f:id:kazuhironagai77:20220306235909p:plain

テストします。

f:id:kazuhironagai77:20220306235925p:plain

味方の中央のMonsterの攻撃力を2倍にします。

f:id:kazuhironagai77:20220306235945p:plain

攻撃が終了しました。

f:id:kazuhironagai77:20220307000005p:plain

味方の中央のMonsterの攻撃力は2倍になって200です。

対戦相手の中央のMonsterのHPが900から700に落ちました。200のダメージを与えています。

今度は味方左翼のMonster、妖精戦士に攻撃力2倍の魔法をかけます。

f:id:kazuhironagai77:20220307000026p:plain

攻撃が終了しました。

f:id:kazuhironagai77:20220307000049p:plain

味方左翼のMonster、妖精戦士は対戦相手の右翼のMonster、妖精呪術師にジャンケンで勝っているので、元々攻撃力が2倍の200になっています。更に魔法で2倍の攻撃力になったので合計、400のダメージを与えます。

妖精呪術師のHPは600から200に減っています。計算通り、400のダメ―ジが入っています。

更に、味方中央のMonsterは前のターンの攻撃力2倍の魔法が解けて、今の攻撃力は100に戻っているはずです。対戦相手の中央のMonsterのHPは700から600に減っています。つまり計算通りの100のダメ―ジを与えています。

この後、何回も対戦しましたが全部において計算通りのダメージを与えました。

8.6 Monsterの種類についてのIdea

凄いIdeaを思いついたんで記録しておきます。

Monsterの種類を果物や野菜にするんです。私が唯一一生懸命やったゲームであるPokémon GOですが、最初の頃捕まえたPokémon、要らなくなるんです。これが凄い邪魔になるんです。これは多分、収集するのが目的のGameだと大体同じだと思います。

Monsterの種類を果物や野菜にすると要らなくなった時に食料として食べる事が出来る訳です。

このIdeaの何が凄いのかって、PokémonのMonsterを集める楽しさ+HxHの戦闘中における逆転要素の楽しさに、追加してアンパンマンの主人公をパクパク食べる楽しさが追加される訳です。

  • みかんちゃんー>HP回復
  • レモンちゃんー>眠りから覚める
  • リンゴちゃんー>知力Up
  • わさびマンー>攻撃力2

みたいな使い方が出来ます。

9. UE5Lumenの勉強

Lumenの勉強以外にUE5のReviewにはNiagara Fluid Simulationが付いている事は分かりました。

これも一寸だけ勉強する事にします。

9.1 Unreal Engine 5 | NEW Niagara Fluid Simulation! [12] を軽く見る

Smart Poly氏のTutorialにはNiagara Fluid Simulationの解説がありました。

これを見てみます。

f:id:kazuhironagai77:20220307000148p:plain

こんなのがあるらしいです。

Plug inからNiagara Fluidsを使用出来る様にすると上記の様に動的にFluidを計算するNiagaraが使用出来るそうです。

f:id:kazuhironagai77:20220307000203p:plain

やってみます。

Niagara Systemを作成する時にNew System from a templateを選択します。

f:id:kazuhironagai77:20220307000221p:plain

あれ、ないじゃん。

f:id:kazuhironagai77:20220307000239p:plain

Tutorialだとこんな感じであります。

f:id:kazuhironagai77:20220307000300p:plain

こんな最初で諦めるのはいやじゃあー。と思って最初のNew system from selected emitter(s)を見たら、こっちにありました。

f:id:kazuhironagai77:20220307000319p:plain

最初のGrid 2D FLIP Emitterを見てみます。

何だ。この実装は。普通のEmitterの3倍位長いじゃないですか。

f:id:kazuhironagai77:20220307000343p:plain

こんなReviewが出て来ました。

f:id:kazuhironagai77:20220307000409p:plain

Level上に配置したらこんなになりました。

f:id:kazuhironagai77:20220307000431p:plain

凄い。

でもその瞬間、Video Cardの対応が停止しました。と表示されUE5 Editorが停止しました。

怖い。

やっぱり私のPCではこのEffectを実行するのは無理そうです。

恐ろしいので実際に試すのはここまでとします。

9.2 CGHOW氏のFluids Plugin in UE5 Niagara [13]を見る

これでNiagara Fluid Simulationの勉強を止めるのは口惜しいのでCGHOW氏のFluids Plugin in UE5 Niagara [13]も見る事にします。正し見るだけです。

f:id:kazuhironagai77:20220307000512p:plain

CGHOW氏も最初のTemplateのヤツをチェックしています。

流石に私のPCとは違い非常に沢山のParticleを生成してもCrashする事はないです。

でもCGHOW氏のEmitter内のModuleの機能はまだ全然理解していないって言っています。

色々なEmitterを試していますがあんまり正常には動いていません。

うーん。

焦る必要ないかもしれませんね。

これは新しいPCを買った後でチェックする事にします。

9.3 Lumenの勉強

Lumenの勉強は来週から始めます。

10. Blenderの勉強

またBlenderの勉強をしていきます。

10.1 先々週までの復習

2022-02-14のBlogからBlenderの勉強内容がまとめられていますので、これを復習します。

忘れている内容だけここに記録します。

f:id:kazuhironagai77:20220307000555p:plain

このやり方2通りあるんですがその内の一個で以下のBoxからMoveを選択する方法の以下のMoveの表示方法を忘れていました。

f:id:kazuhironagai77:20220307000653p:plain

Shift+ Spaceで表示します。

Pivot Pointの表示方法です。

完全に忘れていました。

f:id:kazuhironagai77:20220307000709p:plain

Period keyを押すと表示されます。

以下の画面を表示する方法です。

f:id:kazuhironagai77:20220307000728p:plain

Alt + Eでした。

結構、忘れています。

<Insectの2パターンのやり方>

f:id:kazuhironagai77:20220307000752p:plain

Iを2回押すんでした。

Proportionalの円の表示方法です。

f:id:kazuhironagai77:20220307000831p:plain

Vertexを選択した後に、Oを押してGを押します。CircleだからCかなと思っていましたが何故かOでした。

Bevelです。

f:id:kazuhironagai77:20220307000849p:plain

これは名前自体が覚えられません。

Shrink とFlattingです。

f:id:kazuhironagai77:20220307000906p:plain

これはAlt + Sですが、上記の様に違いがはっきり出る条件が良く分かりません。

以下の画面の表示方法です。

f:id:kazuhironagai77:20220307000924p:plain

Shift + Sでした。

10.2 先週の復習

それでは先週の復習をします。

Ico-sphereのMeshの数を変更する>

これは以下の部分で調整するだけです。

f:id:kazuhironagai77:20220307000951p:plain

< 3D Cursorを中心に移動させる方法>

これはすっかり忘れていました。

Shift + Cでした。

この後、Low Polyの木を作成していきます。

f:id:kazuhironagai77:20220307001013p:plain

幹と枝の部分だけ作成しました。

<葉をつける>

f:id:kazuhironagai77:20220307001035p:plain

Shift+右Clickで3D Cursorの位置を枝の先端面に移動させます。

f:id:kazuhironagai77:20220307001136p:plain

ここにIco-sphereを生成させます

f:id:kazuhironagai77:20220307001153p:plain

<Mesh全体を一発で選択する方法>

選択したいGeometryの面を一個選択した状態でLを押します。

f:id:kazuhironagai77:20220307001215p:plain

<葉をDuplicateする>

Shift + Dだそうです。

f:id:kazuhironagai77:20220307001238p:plain

<Proportionalを使用して選択したVertexのある葉の形状だけを変化させる方法>

f:id:kazuhironagai77:20220307001258p:plain

だそうです。

うーん。

なんとなくは覚えていましたが。

こっからはSelection Methodについてです。

<Loop Selection

f:id:kazuhironagai77:20220307001320p:plain

だそうです。

全然覚えていません。

<Circleを表示してそのCircle内の面を選択する>

f:id:kazuhironagai77:20220307001341p:plain

だそうです。

こっちは少しは覚えています。

<Ring Select

f:id:kazuhironagai77:20220307001407p:plain

流石に集中力が切れて来ました。

今週のBlenderの勉強は復習でお終いにします。

<EdgeのLoop

Altを押したままEdgeを選択するそうです。

<Shortest Pathの選択方法>

ぬおーー。

後一寸なので頑張ります。

f:id:kazuhironagai77:20220307001435p:plain

こんなのやった事しか覚えていません。

<Box Select

Vertex Modeに変換した後に、KeyboardのBで出来ます。

何故かこれは覚えていました。

<X rayに変更>

これも覚えていました。

f:id:kazuhironagai77:20220307001459p:plain

これです。

<Lasso Select

Ctrl + 右Clickでした。

<復習まとめ>

もう復習する量が多くなってきました。

Section Selectionとそれ以前の操作に分けて復習するようにします。

Section Selectionは

  1. Loop Selection
  2. Circleを表示してそのCircle内の面を選択する
  3. Ring Select
  4. EdgeLoop
  5. Shortest Pathの選択方法
  6. Box Select
  7. X rayに変更
  8. Lasso Select

のやり方をまず覚えます。

これを全部覚えてから先に進むようにします。

10.3 Imphenzia氏のLearn Low Poly Modeling in Blender 2.9 / 2.8 [14]の続きを勉強する

来週やります。

11. まとめと感想

今週はやっている最中に腰が痛くなってしまって勉強はほどほどで止めました。

まあそういう時もあります。気長にやる事にします。

12.参照(Reference

[1] CGHOW. (2021, October 21). Book FX in UE4.27 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=7p7bbx9OfWI

[2] bailyldesign. (2021, October 11). How To Export A Game Asset From Blender To Unreal Engine? Blender Base Camp. https://blenderbasecamp.com/home/how-to-export-a-game-asset-from-blender-to-unreal-engine/#:%7E:text=To%20export%20an%20object%20from,transform%20button%2C%20then%20click%20export.

[3] Cloward, B. [Ben Cloward]. (2021b, December 23). Triplanar Projection - Shader Graph Basics - Episode 28 [Video]. YouTube. https://www.youtube.com/watch?v=sjpszGetM40&list=PL78XDi0TS4lEBWa2Hpzg2SRC5njCcKydl&index=28

[4] Cloward, B. [Ben Cloward]. (2021a, August 12). View, World, Object, & Tangent Space - Shader Graph Basics - Episode 10 [Video]. YouTube. https://www.youtube.com/watch?v=E6Srr-HaicI&list=PL78XDi0TS4lEBWa2Hpzg2SRC5njCcKydl&index=10

[5] PrismaticaDev. (2021, June 4). Landscape Grass | 5-Minute Materials [UE4] [Video]. YouTube. https://www.youtube.com/watch?v=uUOcs20Dkcc

[6] Epic Games. (n.d.). Procedural Foliage Tool Quick Start. Unreal Engine Documentation. Retrieved March 6, 2022, from https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/OpenWorldTools/ProceduralFoliage/QuickStart/

[7] World Machine Software LLC. (n.d.). User’s Guide – World Machine Help. World Machine User’s Guide. Retrieved March 6, 2022, from https://help.world-machine.com/topics/manual/

[8] World Machine Software LCC. (2022, January 24). 4. Leftside View. World Machine User’s Guide. Retrieved March 6, 2022, from https://help.world-machine.com/topic/manual-4-side-panel/

[9] Cloward, B. [Ben Cloward]. (2020, April 16). World-Aligned Textures - UE4 Materials 101 - Episode 22 [Video]. YouTube. https://www.youtube.com/watch?v=pXOknekvmwE

[10] Unreal Sensei. (2020a, August 7). How to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=yCRzOdo4b68

[11] Unreal Sensei. (2020b, August 7). How to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mP8eHwVEA0o

[12] Smart Poly. (2022, February 24). Unreal Engine 5 | NEW Niagara Fluid Simulation! [Video]. YouTube. https://www.youtube.com/watch?v=2Ut01VEw2Kg

[13] CGHOW. (2022, February 28). Fluids Plugin in UE5 Niagara [Video]. YouTube. https://www.youtube.com/watch?v=zQPYnHdpom8

[14] Imphenzia. (2020, June 25). Learn Low Poly Modeling in Blender 2.9 / 2.8 [Video]. YouTubehttps://www.youtube.com/watch?v=1jHUY3qoBu8