UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する RPGのStoryの作成と推敲7

<前文>

<小学生を守らなかったTexas の警察>

先々週、WikiLeaksのJulian Assangeについて書いた記事で

と書いたんですが、これってとんでもない示唆に富んだ意見でした。この意見を聞いてから、複雑過ぎて本質が理解出来なかった色々な問題が、実は単純な原因で成り立っている事が理解出来る様になりました。

これは、ゴールと報酬だけ設定して、それを達成する手段や誰が達成するかについての条件については一切限定しなかったら、ゴールの難しさと報酬の高さが釣り合っている限り、どんな問題も解決できるって意味だったんです。

まあ、これはあくまでも仮説です。

でもこの仮説が正しいとします。

では、何で世の中に存在する問題は解決しないで放置されたままなんでしょうか?

それがこのアメリカの南部の奴隷制に繋がって来るんです。南部の奴隷たちは綿花の生産性を上げるためにはどうしたら良いかとか、もっと仕事を楽にこなせる工夫とか、は要求されないんです。単に奴隷主の命令がどんなに馬鹿げていても、はい。と聞いてそれを実行する事だけを要求されます。その代り結果についての責任も負いません。綿花が沢山出来ても報酬が上がる事はありませんし、綿花があんまり出来なくても奴隷主の命令を、はい。と聞いている限り罰を受ける事はありません。

だから生産性が凄く落ちる訳です。

そしてこの現象って、アメリカの南部の奴隷制ほど規模は大きくなくてもあちこちで見られる現象だったんです。

例えば、日本のキャンプ場などでの遭難事件の捜査です。

警察は大量の人員を使って捜索しますが、個々の捜査員が勝手に捜査する事は許されません。そして個々の捜査員は、遭難している子供を見つける事で報酬を得る事もないし、遭難している子供を見つけられない事で罰を受ける事もありません。だから捜査員の動員された数とは裏腹にその効率は物凄く低い訳です。

ここで捜査員たちに2つの条件

  • 自由に探索して良い。
  • 遭難した人を見つけた人は警視総監になれます。とか1000万円ボーナスとかの報酬がもらえる

を保証して後は自由にやって良いとしたら、その効率は1000倍とかになって直ぐに解決したんです。

それで今回のTexasの小学校で起きた銃撃事件についてです。

これは日本ではあまり報道されていませんが、犯人が小学校内で小学生を殺しまくっている間、警官が小学校の回りでバリケードを作って人が小学校に入れないようにして、結果的に更に小学生が殺されるのを助けてしまったんです。

これだって個々の警官に

  • 自由に犯人と戦って良い
  • 犯人を射殺したらボーナス1000万円

とやっていたら直ぐに犯人は射殺されたはずです。

しかし実際は、おそらくですが、個々の警官にとっての仕事は、自分の担当した場所から誰も侵入出来ないようにするのが仕事で、小学生を殺しまくっている犯人と戦う事はどうでも良い事というか、やってはいけない事だったはずです。

これも恐らくですが、警官になるために共和党系の知事みたいな人の推薦状が必要(アメリカは何をするにも推薦状が絶対必要!)でその結果、警察官が利権の温床になっていた可能性もあります。そうなると小学生を殺しまくっている犯人と戦うより、共和党系の議員の選挙を手伝うのが警官の真の仕事になってしまい、小学生を殺しまくっている犯人と戦う事はどうでも良い事というか、やってはいけない事になっていた可能性もあります。

左派の一部は銃の規制ばっかし叫んで実際の問題の解決は全く着手する気がないみたいです。Redditなんか見ると、この悲劇を解決するためにはCorruptionとDisinformationと戦う必要がある。ってコメントが高い評価受けていたのにNRAに中指立ててるだけです。これじゃせっかく知産階級が左派に戻って来てくれたのに、また離れてしまいますよ。

ここで言うCorruptionは自由な競争をさせないである特定の人物にだけ報酬や地位を与えてる今のアメリカの腐敗した政治システムを指している訳です。つまり私が今論じている問題が、小学生を守らなかったTexas の警察の悲劇を起こした問題であると、断言している訳です。そして更に、そういうCorruptionで地位を得た人達が流す嘘(Disinformation)が更に問題の解決を遠ざけてしまっていると言っているんです。

つまり、今私が述べた内容って、ほとんどの大卒レベルの教育を受けたアメリカ人はその事を理解していて、どうやってそれを解決すべきなのかを議論する段階に入っているんです。

何でそんなに頭良いの?と思ったら、アメリカでは文系は必ずCritical Thinkingという科目を習うので、所謂Disinformationを見抜く事が出来るようになるかららしいです。だからほとんどの左派の人は、NRAに中指立ててるより、今の地位の独占システムによる自由な競争への迫害を直すべきだと分かっているんです。

それでやっぱり教育が大切って話に戻って来ます。学生ローンの免除こそが本当は今度の選挙の最も大切な議題になるべきなんです。本当に民主党は、学生ローンの免除を公約にするんでしょうか?

<Biden大統領の台湾に関する発言とUkraine問題について>

Biden大統領が、中国が台湾に軍事的に侵略したらアメリカと戦争だ。と発言、しかも東京で発言しました。

一部のMediaはBiden大統領の失言であると断言していますが、私はそうは思いません。

アメリカにとって、台湾を中国に取られる事はアメリカのハイテク産業の死を意味しますし、台湾が侵略されてもアメリカが何もしなかったら、日中国交正常化の例を見るまでもなく、日本も突然、日米安保を破棄して中国やロシアと組むようになる可能性は十分にあるからです。

そもそも、このハイテク産業の問題の根本の原因は、1980年代に日本のハイテク技術アメリカより優れているのを、人種差別的な理由で受け入れられなかったアメリカ人が、日本はズルしているだけと言う嘘(Disinformation)をつきまくったのが全ての事の発端なんです。その嘘を信じた人達が、アメリカにおける日本企業のビジネス活動を迫害しまくって崩壊させ、その隙間に韓国、台湾、そして中国の企業が入ってきたわけです。

今のアメリカのハイテク産業を支えるためには、韓国、台湾、中国、そして一寸だけ日本の企業の技術は不可欠で、中国からのRare Metalは特に不可欠です。

そんな中でアメリカは中国と戦争しなくちゃ国体を保てなくなっちゃたんです。嘘ついたら後で大きな代償を払わなければならなくなるのはどの世界でも同じですが、この件に関しては「ご愁傷さまです。」としか言いようが有りません。

所で、UkraineではRussiaと戦争する前に、特にIsraelのユダヤ人たちが、Russiaと戦争になったらアメリカは必ず参戦して助けてくれると断言しまくっていました。その時、アメリカに住んでるユダヤ人がアメリカがUkraineのためにRussiaと戦争する事は絶対ないと言ったらそのIsraelのユダヤ人たち絶句していたんです。

そして今になったらUkraineに領土をRussiaに割譲して停戦せよ。とか言っています。無責任の塊ですが、そういう人達の言う事を信じたウクライナ人が一番悪いとも言えます。

最初に戦争が始まった時、Zelensky大統領が言ったような、ウクライナ国民のための戦争であると言う大義を保持していたら現実的な解決策をもっと早い段階で模索出来たはずです。途中からアメリカが参戦するという空手形を信じたから話がこじれちゃったんです。

我々はこの事実をしっかりと学んで、中国が台湾に軍事侵攻した時の対応を考えないといけません。

特にアメリカが中国と戦争するのを恐れて日米安保を破棄してアメリカ本土に逃げ出す可能性は考えておく必要があります。

<他のUEの製作者と喧嘩にならないで間違いを指摘する天才的な方法を見つけました>

今まで、日本語でUEのTutorialを作成する人達はほとんどいなかったんで無視していましたが、かなり質の高いTutorialを作成する人達が結構出て来ました。

そうなると今までのように無視するわけにもいかず、しかし真剣にやると批判的なコメントも書かざるえなくなります。

そうなるとまあ、喧嘩になる可能性が少なからずある訳です。

だからと言ってべた褒めするだけでは肝腎の技術に関する議論を詰める事は出来ません。どうにかして喧嘩にならないで技術に関する限りですが、批判的な意見があっても建設的な議論を進める方法はないのかなー。と思っていたらありました。

○○先生と、先生付けでお互いに呼び合うんです。

「○○先生、ここ間違っていると思います。本当はこうじゃないですか?」と聞けば、あんまり激しく非難しているようには聞こえません。

しかし「○○さん、ここ間違ってますよ。本当はこうじゃないですか?」と聞けば「何、お前上から目線で話しかけて来てんだ。怒!」となる可能性がかなり高いです。

しかもお互いに先生呼びしていれば、周りの分かってない人達に「あ、この人達は何か高度な内容について議論しているんだ。勉強になるな。」と言う印象を植え付ける事が出来ます。お互いに得です。更に技術の間違いも直す事が出来ます。

<2重国籍化するアメリカ人と大人気の日本>

前文が長くなりすぎてしまったので、これは来週以降書きます。

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

<本文>

1.今週の予定

今週も先週とほとんど同じ予定でやって行きます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGのStoryの改善
  • Map1のBugの直し
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • UI Designの勉強
  • Blenderの勉強

2.Niagara: CGHOW氏のTutorialをやる

先週、以下の様に述べたので、今週はVelocity Moduleの勉強を行います。

勉強するのはCGHOW氏のAll Velocity Modules in UE4 Niagara Explained [1]とUE Memorandum氏の【Niagara入門】ForceとVelocityの違いと使用する際のポイントなど【Unreal Engine】.[2]です。

その後で、先週勉強したかったMesh Flipbook in UE5 Niagara Tutorial | Download Files [3]を勉強します。

2.1 All Velocity Modules in UE4 Niagara Explained [1]を軽く見る

どういう風に勉強するのがBestなのかを決定するために軽く全部見ます。

このTutorial、古いです。UE4で作成されています。

ざっと全部見ましたが、結構勉強になりました。

全部のVelocity タイプのModuleの機能について解説しています。久しぶりに使用する言葉ですがGranularity (粒度)が大切で、どの程度、理解していればこれらのModuleを使用出来るようになるのかが良く分かりました。

あんまり難しい物理の法則を理解する必要はなくて、それぞれのParameterを弄ったらParticleがどんな動きになるかを理解しておくのと、その時の動きが特に美しいのを覚えておくのが大切です。

2.2 UE5 NiagaraのVelocity Moduleを試してみます

もうTutorialでどのような方法でVelocity Moduleの機能を確認したのか理解したので、自分で同じ様にやってみます。

と思ったんですが、実際やったら取り留めなくなってしまったんで、All Velocity Modules in UE4 Niagara Explained [1]の内容にそってやっていきます。

まずVelocityの種類ですが、UE5だと

の5種類があります。

正し、Add Velocity Module内に

Linear、From Point、In Coneがあり結局UE4NiagaraのVelocity Moduleと同じ種類あります。

<Add Velocity Module(Linear)>

TutorialではこのAdd Velocity Moduleを追加するSectionとしてParticle Spawn Sectionに追加して、決してParticle Update Sectionには追加するな的な解説がありました。

この問題については前のBlogで検証したので今回はやりません。

にAdd Velocity Module(Linear)を追加します。

値はZにだけ50をセットします。

結果です。

当然、Z軸に沿って上に移動するようになります。

このAdd Velocity Module(Linear)のVelocityをRandomにします。

すると以下の様にSphere上にSpawnさせているのに形状がCubeになります。

Tutorialのは本当にCubeになっているんですが(以下に示した)、私のはまあ言われてみればCubeっぽいかな。って感じです。

これをRandom Range Vectorの代わりにRandom Vectorを代入します。

すると以下の様にSphereの形を維持したまま、Particle が移動するようになります。

これを覚えておけって事みたいですね。

<Add Velocity Module(From Point)>

これはある点から四方、八方に速度を追加します。

原点をPointにした場合は

な感じで先程のRandom Vectorみたいな感じになります。

Pointを原点からずらすと以下の様になります。

<Add Velocity Module(In Cone)>

In ConeですがTutorialだとVelocity Distribution Along Cone Axisの値を0にすると

Coneの内側にはParticleが存在しなくなるんですが、

私のはそうなりませんでした。その代り以下の様にCone AngleとInner Cone Angleの値を同じにすると

Coneの外側にだけParticleが飛ぶようになりました。

以下の様に実装すると

こんな形状も作成出来ます。

組み合わせによっては以下の様な芸術的な放射も作成出来ます。

こういう芸術的というか単に綺麗な放射を作る方法を覚えておくのがGame製作で大切だったんです。

段々、VFXのこつが分かって来ました。

<Inherit Velocity

これは追加しても何もしません。

しかしNS自体が移動した時、

となります。

NSのVelocityを継承(Inherit)しています。

<Static Mesh Velocity

あれ?

TutorialだとStatic Mesh Velocity Moduleを追加するとErrorが起きるんですが、私のは起きないですね。

TutorialではErrorを直すためにSample Static Mesh Moduleを追加しています。

試しに追加してみます。

Tutorialと同じようにCubeをセットしました。

結果です。

CubeのNormal Vectorに沿ってParticleの速度が追加されました。Tutorialの説明通りです。

<Vortex Velocity

やっとVortex Velocityについてです。

以下の様に追加しました。

以下の様になりました。

あれ。放射状に広がっているだけで渦のように回転してないじゃん。と思ったら、

以下の様な回転をしながら外側に広がっていました。

Vortex AxisにRandom Vectorを追加すると

以下の様な動きを示します。

以上でした。

2.3 All Velocity Modules in UE4 Niagara Explained [1]を勉強して

一個大切な事を学びました。

NiagaraのVelocity Moduleの勉強においては、その物理的な原理を理解するのではなく、どのVelocityをどうやってセットしたら見た目が映えるのかを知っておく事が大事だったんです。

良く考えたらGameを作成するのにそんなに物理の原理を知っている必要なんでないです。それより映像的に映えるParticleの動きをどれだけ知ってる方が重要です。

だからCGHOW氏はあんまり物理的な背景なんか解説しないで、Vortex VelocityとCurl Noiseとかを組み合わせて使用していたんです。

いったいこれはどういう意味でやってんだろうと不思議に思っていたんですが、何の事はない。この二つを組み合わせると映像的に映えるから使用していたんです。

2.4 UE Memorandum氏のNiagara入門】ForceVelocityの違いと使用する際のポイントなど【Unreal Engine.[2]を軽く見る

こっちは良く見たらVelocityとForceの違いについてでした。一応、見るだけみます。

これ、前に勉強していました。

  • 基本的にForce はParticle Update Sectionで使用、VelocityはParticle Spawn Sectionで使用します。
  • ForceはF = maだから質量が関係します。

この2点が述べれています。

最初、勉強した時は、スゲエと思ったんですが、それ故にこの内容は一回見ただけで完全に覚えてしまいました。

2.5 Vortex Velocityについて

この二つのTutorialで大体NiagaraのVelocityの見方が分かりました。

Vortex Velocityについて調査してみます。

Vortex VelocityはParticle Update Sectionでも使用出来ます。これ、VortexをParticle Spawn Sectionにセットした場合とどう違うんでしょうか?

これをVortexの式を探してどうだこうだするんじゃなくて見た目で映えるのかどうかで判断します。

<Vortex VelocityをUpdate Particle Sectionにセットした場合>

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

Particleがふわふわと原点の回りを漂っています。

正しこれを作成するために

Vortex AxisにはRandom Vectorをセットしています。

こういう動きをParticleにさせたい時って結構ありますよね。

例えば以下のような場合です。

2.6 Mesh Flipbook in UE5 Niagara Tutorial | Download Files [3]を軽く見る

やっぱりこのTutorialをやるまでの時間は確保出来そうもありません。今週はTutorialを見てどうやって勉強するかを考えるだけにします。

以下のCoinを塊をMayaで作成しています。

これをBlenderで作成する場合、Objectは1個で作成すべきなのかObjectを何個にもすべきなのか不明です。

UEにImportした場合、

4つのStatic Meshになっています。

更にNSでFlipbookを使用して複数のStatic Meshを一辺にセットする方法について解説しています。

一辺、便利そうですがStatic Meshの名前をそろえる為に結構色んな事をする必要があります。

この辺は勉強するPointの一つではあります。

後、このRobotはCGHOW氏の自作で公開されていませんでした。

今度はStatic Meshの数が1000個以上あります。

あ、分かりました。やり方はCoinの時と同じです。でもCoinは4個しかないからいざとなったら力技で一個一個のStatic Meshを登録する事が出来るんです。

でもこのRobotはStatic Meshの数が1000個以上あるからFlipbookを使用して登録するしかない訳です。

元々バラバラのStatic MeshなのでAdd Velocity (from Point)Moduleを追加したら以下の様になります。

それぞれのStatic MeshにMaterialを指定する方法が今一良く分からなかったです。

これは実際に実装する時にやってみるしかないです。

NSを完成させた後でSequencerを使用しています。

うーん。そう言えばUnreal CG氏一時期、Sequencerを使用したTutorialを大量に作成していましたね。

全く勉強してないです。その辺は。

以上でした。

3.Materialの勉強

今週はRandom UV Transforms - Shader Graph Basics  [4]を勉強します。その後でPPLineDrawingの実装でOutlineを作成している部分について検証します。

3.1 Random UV Transforms - Shader Graph Basics  [4]を軽く見る

今回のTutorialは以下の様なMaterialを作成します。

最終的な目的はTilingが目立たないLandscapeの作成だと予測しています。そのための第一歩でしょう。

実装方法については特に疑問に思う所はありませんでした。

3.2 Random UV Transforms - Shader Graph Basics  [4]を実装する

先週作成したMaterial Functionは以下の様に

均一なTransformしかしません。これにRandomな変形を含ませます。(以下の様な感じにします。)

まず以下の赤線で囲った数字をRandom に生成するMaterial Functionを作成します。

なんとここで前のTutorialで作成したMaterial FunctionであるHash23 を使用しています。

迂闊でした。

こいつは作っていない。

Random Noise - Shader Graph Basics - Episode 35 [5]で作成していました。

Random Noise - Shader Graph Basics - Episode 35 [5]は2022-05-23のBlogで勉強しようとしたInterior MappingのTutorial Seriesの一部です。

仕方ないです。このMaterial Function、Hash23だけ先に作成します。

3.3 Hash23の作成

出来ました。

要は上記のようなNoiseさえ作成出来れば良いんです。

3.4 Random UV Transforms - Shader Graph Basics  [4]を実装する Part 2

先程作成していた数字をRandom に生成するMaterial Functionの続きを再開します。

当然、MF_Hash23を追加します。

次にUVにTexCoordinate[0]をパスするためのInput Function Nodeを追加します。

その次にRandomな数字の上限と下限を設定出来る様にします。

しました。

これらは回転とScaleの最大値と最小値を指定するんですね。

次にMF_Hash23のSeed用のInput Functionを追加します。

更にSplit Components ノードのOffsetの値を以下のように指定します。

この辺はRandomな値が得られれば良いので適当でしょうね。多分ですが。

Rotationの値を以下の様にして指定しました。

Tutorialでは何故、16を掛けてFracしたのか解説していましたが、要はRandomな値を得るためです。

Scaleの実装です。

こっちはBの値をそのまま使用しています。

これで完成だそうです。

早速、完成したMFを使用してみます。

この時点でTextureのScaleが小さくなっていますね。

Random Seedに1を追加しました。

結果です。

回転しています。サイズも少しだけ変わっています。

今度は、RandomSeedにTextureの値をPassします。

Tutorialで使用しているのは、以下のようなTextureですが要はNoiseが得られれば良いはずです。

Perlin Noiseで代用しました。

結果です。

なんも写っていません。

Tutorialの結果は以下の様にきちんと写っている部分もかなりあります。

これはNoiseの問題でしょう。

Noiseを変更する前にTutorialがやったようにRound Nodeを追加します。

結果です。

あれ、一気に良くなりました。以下に示したTutorialの結果より良い感じです。

3.5 PPLineDrawingの実装でOutlineを作成している部分について検証します

ざっと見ました。

以下の4つのLineの合成でOutlineを生成していました。

まずはEdge Lineから見て行きます。

Crease Lineです。

Depth Based Lineです。

これがThird Person Characterの足元のOutlineを作成してるみたいです。

Normal Based Outlineです。

Depth Based Lineです。

やっぱりこれが足元のOutlineを作成していますね。

Depth Based Lineの作成方法について勉強します。

3.6 Depth Based Lineの作成方法について

Depth Based Lineの実装を見てみます。

当然ですが、あるPixelの上下左右のPixelをCheckしています。

そしてあるPixelとの差を計算します。

上下左右の差を全部足します。

うーん。

その他に線を太くするための実装や線を濃くするための実装とかはありますが、基本に忠実なOutlineの抽出方法をScene Depth に対して行っているだけです。

逆に、Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [6]が何で足元のOutlineを形成出来ないのかが気になります。

Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [6]のOutlineの実装です。(この実装の内容については2022-05-09のBlogで詳しく検証しています。)

勿論、実装そのものは違いますがやっている事は同じです。

Sample Scene Depth Nodeの中身を確認しましたがScene Depth Nodeの値を使用していました。

もしかしたらこの値がScene Texture : Scene Depthと違うのかもしれません。

この辺は自分で実装して確認しないと分かりませんね。

来週、やって見る事にします。

4.RPGStoryの改善

もう大体、Storyも固まって来ました。特に序章は先週の内容でOKとします。

今週は、第一章を考えます。

4.1 第一章について

第一章の要素は二つあります。

  • 端っこの世界から小さな島の世界に行って村長の隠し財産である金塊を探している
  • 小さな島の世界の山の何処かに住んでている前村長の息子を探す。

です。

前編と後編で分けて書きます。

<1-1

Monsterを倒してヤマメ村に行くと、村長の腰巾着が会いに来る。

村長の腰巾着は秘密の相談があるので夜、村の外れで待っていると言う。

夜、村の外れに行くと、村長の腰巾着は、村長の隠し財産である金塊を無くしてしまった事をPlayerに告げる。

腰巾着は、小さな島の世界に村長と村の荒くれ者たちと言った時に落としてしまったんだ。と気が付く。

しかし小さな島の世界はMonsterが跋扈していて、荒くれ者たちの護衛がなければ行く事は出来ない。

荒くれ者たちに命令出来るのは村長だけで、腰巾着は一人では小さな島の世界に行って落とした金塊を探す事は出来ない。

のでPlayerに落とした金塊を探してきてほしいと頼む。

Playerが乗り気でない。と腰巾着はもし金塊を持ってきてくれたら、Playerにこの村ではタブーになっているある金の切符に関係するある秘密を教えてやると言う。

そして腰巾着は「小さな島の世界」に行くための普通の切符を一枚、Playerにくれる。更に銀河鉄道の駅がどこにあるのかも教えてくれる。

更に小さな島の世界にいっても絶対に沼には近づくなと忠告する。沼にはとんでもなく強いMonsterがいて荒くれ者たちが何人か死んでいる事も教えてくれる。

<1-2

Monsterを倒して端っこの世界の銀河鉄道の駅についたPlayerは腰巾着に貰った普通の切符を使用して、小さな島の世界にWarpします。

腰巾着の忠告に逆らって沼に行くと見た事のないMonsterが現れて直ぐに殺されます。

沼地とは反対側に行くと端っこの世界で見たMonsterが跋扈しています。

Monsterを倒していると、ついにLevelが10になって転職出来るようになります。転職石を使用して狩人になります。

金塊を見つけたPlayerは金塊を端っこの世界に持ち帰ります。

<1-3

金塊を持ち帰ったPlayerは腰巾着からヤマメ村の秘密を教えてもらいます。

今の村長は中央政府からの役人で、前の村長には実は跡継ぎの長男がいました。名前を、ヨハネと言います。大変頭の良い子で次の村長になる予定でした。ヨハネはある時、山から落ちて意識不明の重体になりました。奇跡的に回復したのですが、それ以来、赤い帽子の魔女にあった。金の切符を探さねばならない。と言い出したんです。ヨハネ銀河鉄道に乗って色々な世界を旅する旅人になりました。

そんな時、前の村長、つまりヨハネの父親が事故死してしまったんです。村人は慌ててヨハネを探しました。何とかヨハネと連絡が取れるとヨハネは出来るだけ早く帰るが一カ月程度は掛かってしまう。との返事が返って来ました。

その間に、今の村長が中央から送られてきました。そして勝手に村長に就任してしまいました。文句を言った村民は、今の村長と一緒に来た荒くれ者たちに乱暴され大けがしたり、行方不明になったりしました。恐れた村人はそれ以来、今の村長に逆らわなくなりました。

そんな時にヨハネは村に返って来ました。

ヨハネは次の村長になる気でしたが、今の村長に追い出されてしまいました。

これがこの村の誰も話そうとしない秘密だそうです。

腰巾着は、前の村長の部下だったそうです。生き残るために今の村長の腰巾着をやる事に決めたそうです。

そして腰巾着はPlayerにこう言います。

ヨハネ坊ちゃんは実は、小さな島の世界にある山の洞窟で暮らしている。ヤマメ村に何かあった時にいつでも駆けつけれられるように。その洞窟にいけば、ヨハネ坊ちゃんに会えるはずだ。とヨハネ坊ちゃんに会えば、Playerの探している金の切符について何か重要な手がかりを教えてもらえるはずだ。と。

<1-4

小さな島の世界にある山の洞窟を攻略したPlayerはとうとうヨハネに会う事が出来ます。ヨハネはPlayerに赤い帽子の魔女に会った人間は祝福を受けて、特別な力が使えるようになる。と言います。そしてPlayerは特別な切符を使用出来る力を持っているはずだ。と言います。

更に、Playerに赤い切符を渡します。これは特別な切符でヨハネは使用する事は出来ないそうです。しかしヨハネはPlayerならこの切符を使用して、まだ誰も行った事のない世界に行けるはずだと断言します。

赤い切符を貰ったPlayerは銀河鉄道の駅でそれを使用すると、赤い終末の世界にWarpする事が出来ました。

<まとめ>

大体の粗筋としては良い感じです。後は名前を統一するとか、セリフを整理するとかが必要になります。序章との整合性も必要です。それらは来週以降やります。

4.2 世界の名前の整理

それぞれの世界の名前を整理しておきます。

<端っこの世界>

最初のPlayerが送られる世界です。ヤマメ村があります。

<小さな島の世界>

綺麗な島でしたが、数年前から強力な魚のMonsterが現れて島の一部を沼にしてしまいました。沼には強力なMonsterが住んでいて強靭な戦士でも殺されてしまいます。

島には草原と島を貫く山脈があり山脈のある箇所にはヨハネが暮らす秘密の洞窟があります。

<荒廃した赤い世界>

ヨハネから貰った赤い切符を使ったPlayerは真っ赤な大地の世界に移動します。老人が一人で暮らしていて、1000年ぶりに人が訪ねて来た。とびっくりしています。老人はこの世界は悪魔に支配されていて生き残った人間は彼一人だそうです。

神々は人間が間違ってこの悪魔が支配する世界に迷い込まないように、悪魔がこの世界を支配した1000年前に全ての銀河鉄道がこの駅で停止出来ない様にしてしまったそうです。

老人は若い時に赤い帽子の魔女に出会って、不死の能力を得たそうです。のでこの世界に住む人類が全て滅んでからも一人で生きているそうです。

老人は青い切符をPlayerに渡します。

<美しい青い世界>

青い切符を使用したPlayerは、緑に囲まれた世界に着きます。これは端っこの世界のヤマメ村にいた旅人から聞いた美しい青い世界である事に気が付きます。

ここでPlayerは青の世界の中心にあるアポロン王国に着きます。

するとこの王国の王女が魔物に誘拐されてしまった事が判明します。

王様から魔物は昔は人間で悪魔に忠誠を誓った者たちだと聞かされたりします。そしてその中でも特に選ばれた7人がいて7つの大罪と呼ばれています。彼らは神の様な力を有していて一国の軍隊を持ってしても太刀打ちできないそうです。

王女を誘拐したのはその中の一人であるPrideの毒蛇です。

王様は軍隊を送って王女を助けようとしましたが、毒蛇はドラゴンに変身しで空から軍隊を攻撃します。軍隊の攻撃はドラゴンには当たらず、ドラゴンの攻撃によって軍隊は壊滅状態になりました。

王様は王女は南の塔に幽閉されているとPlayerに告げます。そしてPlayerに王女を助け出せないかと相談します。

この辺のStoryは複雑で、今簡単にまとめる事は出来ません。

来週、考える事にします。

必要な要素は

  • Prideの毒蛇が狙っているのは金の切符である事
  • 悪魔軍団が人間を苦しめるために7つの大罪を送ったように、神々も人間を助けるために12使徒をこの世に送った。
  • 雷神剣があればドラゴンを倒せる
  • 12使徒の一人がこの青い世界の何処かにいる。そしてその人なら雷神剣の場所を知っている。

を追加する事です。

<黄色い砂漠の世界>

ここのStoryも来週書く事にします。一応、世界の名前は黄色い砂漠の世界とします。

5.Map1Bugの直し

今週は今まで直したBugのまとめを行います。

5.1 直したBugのまとめ

2022-04-11Blog

このBlogで以下のBugを抽出しました。

  • 宿屋、道具屋、武器屋、神殿のUI
  • Start 画面からMap1に移動する時、Map1Landscapeが完成する前にCharacterが生成して落ちてしまうBug
  • 宿屋の主人は落ちて消えている
  • 武器の隠し場所の前にいる老人のセリフを作成
  • 武器を装備した状態で戦闘中に死んで、復活した時に攻撃力がオカシイBug
  • 金貨0枚で買える道具や武器を直す
  • 戦闘すると職業が弟子に戻ってします
  • 戦闘中の画面でLevelを表示
  • 転職石を使用出来るのはLevel10になってから。
  • 詩人のセリフを変える
  • NPCが夜になっても消えません。
  • 封印された石像のボタンがDefaultのまま
  • 道具を使用した時にCommentが表示されないため、本当に道具を使用したのかどうかが分かりにくい
  • 道具は何個持てるのかについての制限
  • 銀河鉄道の駅員がGrey manのまま
  • ポーズ画面の地図をどうするのか?
  • Monsterが復活するようにする
  • Save 出来る神官を追加

これらのBugの幾つかは完全に直しましたが、後で大幅に変更する必要があるものは全く弄っていません。少しだけ直したモノや、直した後に更に新たなBugが見つかったモノもあります。

それらをここで整理しておきます。

5.2 2022-04-18Blogで直したBugのまとめ

<宿屋、道具屋、武器屋、神殿のUIの直し>

<<Bugの直し率>>

85%

<<直した内容>>

宿屋、道具屋、武器屋のUIの内、Playerの操作するCharacterのParameterの表示を統一しました。

神官のUIは直していません。その理由は後で宿屋と神殿の機能を合わせる可能性があるから、今回は神官のUIは直しませんでした。

<<これからの課題>>

UIのDesignについて今、勉強中ですが一番肝心なのは誰かにPlayさせて、操作に困る事がないか確認する事です。被験者に試してもらう必要があります。

<Start 画面からMap1に移動する時、Map1のLandscapeが完成する前にCharacterが生成して落ちてしまうBug

<<Bugの直し率>>

100%

<<直した内容>>

Playerの操作するCharacterが生成される箇所の下に石の板を配置しました。これで万が一Landscapeが生成される前にPlayerのCharacterが生成されたとしても石の板の上に乗りますので落下して死ぬ事は無くなりました。

<<これからの課題>>

特にないです。

5.3 2022-04-25Blogで直したBugのまとめ

<宿屋の主人が落ちて消えている>

<<Bugの直し率>>

100%

<<直した内容>>

宿屋の主人を生成するLevelを適切なSub Levelに移動しました。

<<これからの課題>>

特にないです。

<武器の隠し場所の前にいる老人のセリフを作成>

<<Bugの直し率>>

0%

<<直した内容>>

今、Storyを作成中なので会話のセリフが大幅に変更になるのは間違いないので弄っていません。

<<これからの課題>>

Storyが決まったらセリフの作成になります。

5.4 2022-05-02Blogで直したBugのまとめ

<武器を装備した状態で戦闘中に死んで、復活した時に攻撃力がオカシイBug

<<Bugの直し率>>

100%

<<直した内容>>

戦闘中に死んだ場合、復活出来ないようにしました。

<<これからの課題>>

となると当然、Saveした箇所から復活する事になります。なりますがSave機能のTestはまだほとんどしていません。

まだ、何をSaveすべきなのか決まっていないので、Save機能のBugのCheckも出来ていません。

<金貨0枚で買える道具や武器を直す>

<<Bugの直し率>>

100%

<<直した内容>>

金貨0枚で買えるItemや武器の値段を追加しました。

<<これからの課題>>

武器やItemの値段が適切かどうかを判断する必要があります。

更に、Itemや武器の解説をする以下のWidgetもHPやMPだけでなく、文章を追加出来るようにする必要があります。

5.5 2022-05-09Blogで直したBugのまとめ

<戦闘すると職業が弟子に戻ってしまう>

<<Bugの直し率>>

100%

<<直した内容>>

戦闘から戻って来た時に、元の職業のままになるようにしました。

<<これからの課題>>

特にないです。

<戦闘中の画面でLevelを表示>

<<Bugの直し率>>

100%

<<直した内容>>

戦闘中の画面にLevelが表示されるようになりました。

<<これからの課題>>

特にないです。

5.6 2022-05-16Blogで直したBugのまとめ

<転職石を使用出来るのはLevelが10になってから>

<<Bugの直し率>>

100%

<<直した内容>>

Levelが10になった時だけ転職出来るようにしました。

<<これからの課題>>

一辺にLevelが2以上上がった場合、以下の様に最後の文章しか表示されません。

これは後で直します。

<詩人のセリフを変える>

<<Bugの直し率>>

0%

<<直した内容>>

セリフはStoryが決まってから全部直すので、今回は直しませんでした。

<<これからの課題>>

詩人には何を語らせるのかを決める必要があります。

NPCが夜になっても消えません>

<<Bugの直し率>>

???%

<<直した内容>>

再現しませんでした。

<<これからの課題>>

こういう再現性のないBugはどうやって直すんでしょうか?ある条件で起きるんでしょうが、その条件を発見するのに凄い時間と労力が掛かる気がします。

5.7 2022-05-23のBlogで直したBugのまとめ

<封印された石像のボタンがDefaultのまま>

<<Bugの直し率>>

100%

<<直した内容>>

ButtonにButtonのIllustrationを使用しました。

<<これからの課題>>

ButtonなどのIconは最初に統一したDesignを作成しておくべきでした。

<道具を使用した時にCommentが表示されないため、本当に道具を使用したのかどうかが分かりにくい>

<<Bugの直し率>>

100%

<<直した内容>>

新しいWidgetを追加して道具を使用した事を示すようにしました。

<<これからの課題>>

特にないです。

この修理方法はかなり良いIdeaでした。見た目も良くなりかつUIが分かり易くなった素晴らしい例です。

<道具は何個持てるのかについての制限>

<<Bugの直し率>>

100%

<<直した内容>>

道具は30個までしか持つ事しか出来なくしました。

<<これからの課題>>

要らない道具は捨てられるようにする必要があります。

5.8 2022-05-30Blogで直したBugのまとめ

銀河鉄道の駅員がGrey manのまま>          

<<Bugの直し率>>

100%

<<直した内容>>

とりあえず人に変えました。

<<これからの課題>>

銀河鉄道の職員は全部魔女に変更するかもしれないと書かれていました。その案は没になったので、今のCharacterで良いはずです。

<ポーズ画面の地図をどうするのか?>

<<Bugの直し率>>

100%

<<直した内容>>

消しました。要らない機能は削る事にしました。

<<これからの課題>>

特にないです。

<Monsterが復活するようにする>

<<Bugの直し率>>

50%

<<直した内容>>

倒したMonsterが翌日の朝には復活するようにしました。

ただし、復活するのはLevelを新しく読み込んだときのみ、更にMap1だけです。

<<これからの課題>>

今、MonsterはすべてSub Level上で生成するように配置されています。

ただしMap1のSub Levelは大変小さくて後で作り直します。のでMonsterをどうやって生成するのかについても後で検討し直します。

<Save 出来る神官を追加>

<<Bugの直し率>>

100%

<<直した内容>>

神官をヤマメ村の外れに配置しました。

<<これからの課題>>

キチンとSave出来るのかどうかについての検証が必要です。

5.9 Bugの直しについてのまとめと課題

細かいBugは直ぐに直せる事は分かりました。問題は大きなBugです。

UE4 C++に関するBugは今から直すとGame全体を直す必要が出て来ます。

UIの会話に関するBugも今から直すのは大変です。会話システムやTypewriter EffectはGame製作の初期の段階で作成すべきでした。

そういう大きなBugはある程度直したら、今回のRPGは完成とします。そして次回作を作成する時に、設計の段階で直すべき項目として追加します。

後、心配なのが戦闘システムとSaveシステムです。

戦闘システムでは敵のMonsterが一体しか出て来ません。これを沢山の種類のMonsterが出て来るように改良する必要があります。

Saveシステムは現在、Playerの操作するCharacterのDataだけ保存する様になっています。

これをEventの進行状況などのDataもSaveできるように改良する必要があります。

まだまだ沢山作成する箇所があります。

6.Open Worldの検証

今週はVirtual Textureの使い方を別なTutorialで勉強します。その後で公式のDocumentを勉強します。

MR3D-Dev氏のUnreal Engine 4: Ultimate Beginner's Guide to Runtime Virtual Texture Blending (RVT) [7]を勉強して、その後で公式のDocumentであるRuntime Virtual Texturing Quick Start [8]を読みますか。

6.1 MR3D-Dev氏のUnreal Engine 4: Ultimate Beginner's Guide to Runtime Virtual Texture Blending (RVT) [7]を軽く見る

30分もある割と長いTutorialでしたが非常に上手くまとまっていました。

当然、Unreal Sensei氏のHow to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [9] とほとんど同じやり方をしていますが、細かい点で違っている部分が何か所かありました。特にProjectionの仕方が違っている気がしました。

違っている気がしたんですが、そんなにUnreal Sensei氏のHow to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [9] のやり方を覚えている訳ではないのでどう違っているのかをはっきり指摘出来ないです。

MR3D-Dev氏のRVTのTutorialですが、以下の様な実装をしています。

理解しやすさを追求するために、見た目の良さは完全に捨てています。

Landscapeの色がStatic MeshにProjectされています。

これは確かに分かり易かったです。

ただこの方法だとUnreal Sensei氏が見せた様なTextureの歪みが発生する問題なんかは気が付かないですね。その事はMR3D-Dev氏も気が付いていたらしく次のTutorialでMega Scanを使用したやり方を解説すると言っていました。

以下に、簡単ですが、MR3D-Dev氏のUnreal Engine 4: Ultimate Beginner's Guide to Runtime Virtual Texture Blending (RVT) [7]の手順をまとめます。

Virtual Textureが使用出来る様にProject SettingのEnable Virtual Texture SupportをCheckします。

次にRuntime Virtual TextureのSampleとOutputの違いについて解説しています。

OutputがLandscape用のMaterialに使用します。

SampleはStatic Mesh用のMaterialに使用します。

ああ。この分かり易さは懐かしい感じがします。

まだProgrammingが趣味の時代、みんなで理解した事を教え合っていた時代の香りがします。

後、Cast Shadowについても語っていました。

これについては良く分からなかったです。

Landscape用のMaterialを作成します。

以下の様に作成していました。

特に分からない点は無かったです。

World Heightの取り方もUnreal Sensei氏のTutorialと同じでした。

今度はSphereを配置してそのMaterialを作成します。

Baseの色はSphereの元々の色である緑とRuntime Virtual Texture SampleからPassされた値をLerpして作成します。

Lerpの割合ですが、以下の方法で計算しています。

うーん。

この辺の計算はUnreal Sensei氏のやり方と違っているように見えますね。後で考えます。

Runtime Virtual Texture Sample NodeはErrorが出ていますがこれを直すためにRuntime Virtual Textureを2つ作成します。

Virtual Texture Contentに適切なものを選択します。

それをRuntime Virtual Texture Sample NodeのVirtual Textureにセットします。

次に、LevelにRuntime Virtual Texture Volumeを追加します。

Runtime Virtual Texture VolumeのサイズをLandscapeと同じにします。

このやり方、Unreal Sensei氏がやった方法と全く同じです。

単にVolumeの大きさを変更する方法まで全く一緒って事は、どういう事何でしょうか?

何か怪しいです。

Height様にもう一個作成しました。

それぞれのRuntime Virtual Texture VolumeのVirtual Textureに先程作成したRuntime Virtual Textureをセットします。

次にLandscapeを選択してRender to Virtual Textureの項目にRuntime Virtual Textureをセットします。

以上でした。

<Tutorialを見た感想>

Virtual Textureの基本的な使用方法に関してはこれ以上ない位分かり易かったです。

ただこれを見ると、どうやってBen Cloward先生のTri-Planar Projectionと組み合わせるのか一寸考える必要がありそうですね。Static MeshのMaterialの方のNormal VectorをTri-Planarと通常の物をLerpする必要がありそうで、思っているよりかなり複雑に成りそうです。

まあ、コツコツやって行きましょう。

後、Comment欄にGDi4K氏のCommentがありました。

GDi4K氏に感謝されるなんてMR3D-Dev氏は結構大御所なのかもしれません。

6.2 MR3D-Dev氏のUnreal Engine 4: Ultimate Beginner's Guide to Runtime Virtual Texture Blending (RVT) [7]を実装してみる。

それでは実際にやってみます。

まずLandscapeを作成します。

Landscape用のMaterialを作成します。

これ本筋とは全く関係ないですが、Use Material AttributesにCheckを入れると

Result Nodeがこれから

これに変わります。

因みにProject SettingのEnable Virtual Texture Supportは既にCheckされています。

以下の様に実装しました。

World Heightの値のPassの仕方もUnreal Sensei氏と全く同じでした。(2022-05-16のBlogより)

MR3D-Dev氏のこのTutorialが作成されたのが

で、Unreal Sensei氏のTutorialが作成されたのが

ひょっとしてMR3D-Dev氏のTutorialが元になってんじゃ…。

GDi4K氏もMR3D-Dev氏のTutorialにコメント残していましたし、MR3D-Dev氏ってもしかしたら凄い人なのかもしれません。

LandscapeにこのMaterialをセットして以下の様にPaintしました。

LayerのあるMaterialをLandscapeにセットする方法は、Landscapeの勉強の所で散々やったのでここでは省きます。

Static MeshであるSphereを配置しました。

Sphereの方のMaterialを作成しました。

LerpのAlpha値の計算方法ですが、

Unreal Sensei氏の実装方法と全く同じです。

これって最初に考えた人に著作権ありそうですが、誰が一番最初に実装したんでしょうね。

MR3D-Dev氏はどっかからCopyしたと宣言してましたが、Unreal Sensei氏はまるで自分で編み出したかのように使用していました。

少なくとも私はこの実装方法は、Unreal Sensei氏が自分で編み出したモノと思っていました。

一寸Unreal Sensei氏の評価に補正をする必要を感じましたね。

以下に示したRuntime Virtual Texture SampleのErrorを直します。

このErrorはVirtual Textureがセットされていない事で起きています。

のでここにセットするRuntime Virtual Textureを作成します。

Heightの方はVirtual Texture Contentの値をWorld Heightに変更します。

これらをRuntime Virtual Texture SampleのVirtual Textureにセットします。

Errorが消えました。

Material Instanceを作成して

SphereのMaterialにセットします。

何か真っ黒なんですが。

Tutorialのはこの時点で色がついています。

とりあえず全部やってから検証します。

Runtime Virtual Texture Volumeを追加します。

Landscapeをセットします。

Runtime Virtual Textureをセットします。

更にLandscapeのDraw in Virtual Textureに先程のRuntime Virtual Textureをセットします。

これで完成です。

何も変化しません。

LandscapeにRVTのHeightの方を追加したら

変わりました。

うーん。

6.3 Runtime Virtual Texturing Quick Start [8]を読む

今度は公式のDocumentであるRuntime Virtual Texturing Quick Start [8]を読みます。

これ全部読んだんですが、間違っている気がします。

Splineに対して使用しているので何とも言えないんですが、Landscape用のMaterialにRuntime Virtual Texture OutputとRuntime Virtual Texture Sampleの両方を使用しています。

うーん。でもここでPassしているのってSplineに使用しているMaterialのDataなんですよ。

Splineについてもう少し勉強しないと何とも言えないですが、読んだ限りでは、Splineに使用しているMaterialの値をLandscapeのMaterialにPassしてLandscapeのSplineの箇所の色を変更しただけに思えます。

のでLandscape用のMaterialにあるRuntime Virtual Texture Outputは必要ないと思います。

それは兎も角、ここではWorld Heightの計算方法は出て来ていませんでした。

6.4 勉強した感想

MR3D-Dev氏のUnreal Engine 4: Ultimate Beginner's Guide to Runtime Virtual Texture Blending (RVT) [7]とUnreal Sensei氏のHow to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [9] があんまりにも似すぎていています。

これ位似ているなら、後から作成したUnreal Sensei氏はせめて参考文献にMR3D-Dev氏の名前を入れておくべきじゃないのと思いました。

実際の所はどうなのか分かりませんし、二人の実装部分で全く同じ個所がありますが、その部分について、MR3D-Dev氏は何処からかCopyして来たと言っていますので、単純にUnreal Sensei氏がMR3D-Dev氏のをCopyしたとは言えないかもしれません。

二人ともTutorialそのものは非常に分かり易いので、二人が納得しているのなら私からは何も言う事はないです。

駄目なのは公式のTutorialであるRuntime Virtual Texturing Quick Start [8]です。

これ何をやっているのか全然わかりません。Virtual Textureを使用するとどうなるのかも不明ですし、Virtual Textureの機能も良く分かりません。

Virtual Textureのやり方をまとめます。

<LandscapeのMaterialのDataをLandscape上に配置しているStatic MeshにPassする場合>

  • Landscape用のMaterialにRuntime Virtual Texture Output Nodeをセット
  • Static Mesh用のMaterialにRuntime Virtual Texture Sample Nodeをセット
  • Runtime Virtual Texture Sample NodeがErrorになるので、そのErrorを解消するためにRuntime Virtual Textureを作成してRuntime Virtual Texture Sample Nodeにセット
  • Level上にRuntime Virtual Texture Volumeを作成し、Runtime Virtual Textureをセット
  • Runtime Virtual TextureをLandscapeにセット

これで出来るはずです。

今週のVirtual Textureの勉強はここまでとします。

7.Gaeaの勉強

今週はGaea Beginner Tutorial Series : Part 3 - Basic Texturing [10]を勉強します。先週の内容も理解してないのになんでまた新しいのを勉強するのかと言うと、とりあえず全部やってから考える事にしたからです。

別にLevel Designerになる訳じゃないので全部理解する必要もない訳です。

Gaeaの勉強の目的は

  • 16 km^2程度のOpen MapGaeaで作成する
  • Gaeaに関する日本語のTutorialがないので一番最初に作成してGaeaの専門家になる

です。

これを忘れずに勉強していきます。

7.1 Gaea Beginner Tutorial Series : Part 3 - Basic Texturing [10]を軽く見る

今週はTexturingですが、これ先週作成したGeometryにTextureを貼り付けるって事でしょうか?

当然ですが川や湖の部分、雪の部分、それ以外の部分には別々なTextureを貼り付ける必要があります。

どうやるんでしょうか?

それを今回、勉強するみたいですね。

<Preparing for texturing

ここではそれぞれの場所にTextureを貼り付けるための準備をするみたいです。

Graphの名前をConstructionに変更しました。

Surface Nodeの後にFX Nodeを追加しました。

そのFX Nodeの名前をConstructionに変更します。更にMake Portalを使用してOutputにしました。

Rivers、Lakes、SnowfallのNodeをそれに繋ぎ、

この3つのNodeを別なGraphに移動させます。

移動させた先のGraphはPostにします。

これだけですが、何となくPostはTextureを追加する箇所みたいな感じになりますね。

更にColorというGraphを追加しました。

どうもPostではWater in the Snowだけ作成して実際のTextureはこのColorで追加するみたいです。

このWater in the Snowが何を指しているのかは今のところは不明です。

ConstructionにあるNodeの幾つかのOutputの値が必要なのでMake Portalします。

PostにあるNodeも同様です。

ここまでは何とか理解出来たのですが、PostのNodeを以下の様に組み替えてしまいました。

これがWater in the Snowなんでしょうか?

これすると何が変化するのかが分かりません。コレする目的も分かりません。

でもまあ最初から全部理解するのは諦めましたんで、まあいいです。

これで準備は終わりです。

<Base Texture

Colorに以下のNodeを作成します。

Final Terrainがどれなのか今一分かりませんが、まあいいでしょう。

Textureを繋げます。

見た目が一気にリアルになりました。

何をしたんでしょうか?

Geometryの表面にTextureを作成しただけみたいです。

その作成したTextureに色を追加します。

SatMaps Nodeです。

その後にFX Nodeを追加します。

すると3Dが以下に示した様に平らになってしまいます。

解説ではこれはBugかも知れないと語っていますが、上記に示した様に後から判明した事ですが、Color FX NodeをFX Nodeの代わりに使用する必要がありました。

SatMaps NodeからOutputせずにあえてFX Nodeを追加してOutputする理由は不明です。

Snow Texture

Color内に以下のNodeを組みます。

Snowfallは基本的には一色なので

を使用します。

次にCombine Nodeを追加します。

このCombine Nodeの使用方法は完全に理解しました。

先程作成したBase TextureとこのSnowfallを合成します。UE5のMaterialのLerpみたいな感じです。ただしLerpと違うのはMaskを追加してどの場所だけ合成するのかを指定出来る事です。

上記の例ではMaskにSnowfallを指定してSnowfallの場所だけをBase Textureに合成するように指定しています。更に合成する場所の合成の割合はSnowfallを100%、Base Textureを0%にしています。

以下のような結果になりました。

この後にまたFx Nodeを追加しました。

こっちはColor Fx Nodeを使用しなくても大丈夫なんですね。何故なんでしょう?

何故、Fx Nodeを最後に追加しているのかの説明がありました。

Fx Nodeがあると後で改良した時に、例えば上記の例だとCombine Nodeの後に別なNodeを追加したとします。するとOutputの設定を全部やり直さないといけなくなります。凄い手間です。しかしFx Nodeを追加してそこからOutputした場合、Combine Nodeの後に別なNodeを追加したとしても、何もする必要がありません。

これがFx Nodeを必ず追加してからOutputする理由だそうです。

理解しました。

Water

Riverに色付けします。

やり方はSnowfallと全く同じです。

更にFx Nodeを追加しました。

次は湖に色付けします。

SnowfallやRiverとほとんど同じですがMaskに使用するOutputが違います。

LakeにはSnowfallやRiverにあるSurfaceがないので代わりにLakesを使用します。

<まとめと感想>

大体理解しました。

実際に自分でやってみます。

7.2 Gaea Beginner Tutorial Series : Part 3 - Basic Texturing [10]を実装する

まず先週、作成したMountain.torを開きます。

イイ感じです。

<Preparing for texturing

Graphの名前をConstructionに変更します。

Surface Nodeの後ろにFx Nodeを追加します。

Fx Node のOutputをMake Portします。

次にRivers ,Lakes,そしてSnowfall Nodeを別なGraphに移すための準備を行います。

まず以下に示した様に先程作成したFXとRivers ,Lakes,そしてSnowfall Nodeを繋ぎます。

この3つのNodeを選択した状態で、

Graphの右端にある三本線をクリックしてMove Selected NodesのNew Graphを選択します。

新しいGraphの名前はPostです。

以下の様になりました。

更にもう一個新しいGraphを作成します。

Colorと名付けます。

このGraph内でTextureに色付けします。

これも分かってしまえば何と言う事ないですが、最初は何故、こんなに沢山のGraphに分けるのか困惑しました。単に

  • Geometryの作成
  • Post処理
  • 色付け

などの機能の処理に応じてそれぞれ別のGraphを使用しているだけでした。つまり整理整頓しているだけです。

こういうのはきちんと解説してくれないと初心者は非常に不安になります。

このColorで使用するDataをそれぞれのNodeから集めます。

まずConstruction GraphにあるErosion NodeのDepositとFlowです。

これらを使用した記憶はないですが、後のTutorialで使用するんでしょうか?

Post GraphにあるRivers NodeのDepthとSurfaceです。

SurfaceはMaskに使用していたはずです。Depthは覚えていません。

Post GraphにあるLakes NodeのLakes とDepthです。

LakesはMaskに使用したのを覚えています。

ここでOutputのImageを見る方法を教えていました。

例えばLakes NodeのOutputであるLakesの値が見たいとします。

以下の様にFxとLakesを繋ぎます。

すると以下の様なImageが表示されます。

しかし、以下の例のようにDepthにFx Nodeを接続した場合、

何も表示されません。

これはDepthのDataが無いのではなく、人間に認識出来る値ではないためです。

この場合は、FxのPropertiesにあるLvを押します。

すると以下の様に人間の目に見える状態に調整してくれます。

Klaus氏は、こういう重要な解説をぽろっとします。

私はこのTutorialを既に4回位見てますが、この説明、今初めて気が付きました。こういう役に立つ情報は教える前に今から超大切な話をします。みたく言って目立つようにしてほしいです。

SnowfallのSnowも追加します。

PostのNodeを以下の様に整理しました。

Tutorialだと編集が飛んでいてイキナリ上記のNodeの配置になっています。

Rivers Nodeの紫色のPinであるPin as Underlayを何時つけたのかも何故つけたのかも分かりません、最後のFX Nodeもいつの間にか付いていました。

最後のFX Nodeですが名前はFinal Terrainだそうです。それは解説がありました。

Final TerrainのImageを以下に示します。

Snowfall, River, そしてLake Nodeを追加した後のImageなのにそれのどれも写っていません。

<Base Texture

それではColor Graph内の作成に入ります。

まず以下のFXを作成しFinal Terrainを接続します。

更にTexture Nodeを追加します。

更にSatMapsを追加します。

適切な色を選択します。

以下の様になりました。

ここ、前から気になっていたんですが、Texture Nodeって絶対必要なんでしょうか?

試しに外してみます。

結果です。

Textureがある場合です。

Texture Nodeがある方が細かい表現が追加されていますね。でも無くてもErrorにはなりませんでした。

Color FX Nodeを追加しました。

Tutorialでは単なるFX Nodeを使用していますが、どうせなら色が見えた方が良いのでColor FX Nodeに変更してみました。

名前はTutorialでは単なるBase Texture ですが、ここではBase Color Textureにしました。

Snow Texture

雪の部分のTextureを作成します。

CLUTer Nodeを追加します。

Combine Nodeを追加します。

結果です。

更にFX Nodeを追加しました。

TutorialのようにFX Nodeを追加したらErrorになったのでFX Color Nodeを追加しました。

Water

川の色付けを行います。

雪と全く同じやり方です。

結果です。

最後にLakeを追加します。

実装方法はRiverとほとんど同じです。

結果です。

角度を変えてみました。

うーん。

UEにImportしてみないと何とも言えないですね。

7.3 Gaea Beginner Tutorial Series : Part 3 - Basic Texturing [10]を勉強してみて

今回は前回よりは理解出来ました。

今回のTutorialでは前回作成したTerrainにTextureを追加しました。

Textureを追加するに辺り、

  • それぞれの機能に応じてGraphを分ける。(Construction, Post, Color
  • Texture Nodeを追加してからSatMaps Nodeを追加
  • Nodeの最後には必ずFX Nodeを追加
  • 雪、川、湖の色付けはCombine Nodeを使用

などが理解出来ました。

中々勉強になりました。

8.雪山のMapの作成

兎に角、窪みを付けて歩く方法の勉強です。

まず、CodeLikeMe氏の追加のTutorial、Landscape Deformation in Unreal Engine II - Snow Deformation [11]を見ます。

その後で、今週何をするのかを決定します。

8.1 Landscape Deformation in Unreal Engine II - Snow Deformation [11]を見る

うーん。あんまりImproveしていませんね。

このTutorialを見ている間に別の雪を踏みしめるTutorialが出て来ました。

RP Monkey 氏の[Free Download] UE4 Runtime Virtual Texture Dynamic Snow Displacement [12] とMarvel Master氏のUnreal Engine Basic Dynamic Snow Tutorial - with Runtime Virtual Textures - UE4.25 [13]です。

RP Monkey 氏の[Free Download] UE4 Runtime Virtual Texture Dynamic Snow Displacement [12]は2分と大変短いTutorialですが、Download Fileがついていて全部の実装が見れます。

Marvel Master氏のUnreal Engine Basic Dynamic Snow Tutorial - with Runtime Virtual Textures - UE4.25 [13]のは

雪の中を行軍しているような大迫力です。

19分のTutorialで長さも十分です。

ただしこのTutorialは先程のRP Monkey氏のTutorialを参考にして作成したそうです。

Landscape用のMaterialにはRuntime Virtual Texture Sample ノードが使用されていました。

つまり、LandscapeのMaterialをそのLandscape上に配置されているStatic MeshにProjectする時とは逆のやり方です。

World Displacementの値の計算方法ですが以下の様にしてます。

これは単なる値でしょうね。

World Heightを使用した方が良い気がしますが、後々自分で実装する時は考えます。

まあZを掛けて0,0,1にしているのは参考になります。

後は、この足跡用のMaterialを使用するStatic Meshの作成方法が独特な感じがしました。これはまあどうやって作成してもその人の好みですので。

かなり簡単に実装しています。これはやって見る価値がありそうです。

以下に実装方法を簡単にまとめます。

<Project Settingの設定>

まずProject Settingを開いてVirtual Textureが使用出来るようにします。

この部分は何回も勉強しているのでSkipします。

<Runtime Virtual Textureの作成>

次にRuntime Virtual Texture を作成します。名前はSnowRVTです。

中身の変更は特にしません。Base Colorだけパスしているので当然ですね。

<足跡用のMaterialの作成>

足跡用のMaterial、SnowStamp_Matを作成しました。

以下の実装を追加しました。

こんなMaterialでもいいんですね。Result Nodeを使用してないです。

<Landscape用のMaterialの作成>

World Displacement以外の実装は以下の様になっていました。

SampleにセットしたRVTは

先程作成したSnowRVTです。

World Displacementを使用するのでResult Nodeの設定を以下の様に変更しました。

World DisplacementとTessellation Multiplierの設定は以下の様になります。

<Landscapeの生成>

Landscapeの生成方法については今まで散々やったやり方と一緒なのでSkipします。

雪のMaterialをセットすると以下の様な雪に埋もれた感じのLandscapeが生成されています。

これは雪のMaterialのWorld Displacementの影響なんでしょうか?

実装した時に調べてみます。

Landscapeがチカチカしています。これを直すためにLandscapeのNegative Z BoundsとPositive Z Boundsの値を

以下の値に変更しています。

これが具体的には何をしているのか、どうしてこの値を弄るとLandscapeのチカチカが直るのか分かりません。

<Runtime Virtual Texture Volumeの追加>

このTutorialは4.25で作成されていて、この時はまだRuntime Virtual Texture Volumeのスポイトがまだないみたいで、Runtime Virtual Texture Volumeからクラスを作成してLandscapeと同じサイズにしています。

<雪に足跡を作成する>

まずThird Person Characterを開きます。

Event TickにBranchを繋げてThird Person Characterが動いているかどうかを確認します。

Third Person Characterが動いていた場合、Static MeshをCapsuleが有る位置に生成します。

Add Static Mesh ComponentのStatic MeshにPlanをMaterialのElement 0 に先程「足跡用のMaterialの作成」で作成したMaterialであるSnowStamp_Matをセットします。

更にCollusion PresetにNoCollisionをセットし

Render to Virtual TextureにSnowRVTをセットします。

成程。

今まで勉強したVirtual Textureは全部Landscape用のMaterialの値をStatic Meshに送っていました。その場合LandscapeにRuntime Virtual Textureをセットしていましたが、今回はStatic Meshに使用されているMaterialのDataをLandscapeに送ります。

ので、Static MeshにRuntime Virtual Textureをセットします。

納得です。

更にVirtual Texture Pass TypeにVirtual Texture Onlyを指定しています。

これは良く分かりませんね。

最後にCast ShadowのCheckを外します。

結果です。

今週はこれ以上、雪山マップの作成に費やす時間が無くなってしまったのでここまです。

実装は来週やります。

9.UI Designの勉強

今週は、先週出て来たUX Designについて勉強します。

Gameに関するUX Designを調べる前に、UX Design一般について勉強します。

何個かYouTubeのTutorialを見たんですが、それぞれ言っている事が全然違います。

更に、それぞれのTutorialが実際の中身は有料版のCourseを選択して下さい。となっていて実際はどうなっているのか今一理解できません。

それで私の結論としては、UX Designという学問はない。何か流行っている言葉でそれを名乗っていると仕事を得やすい。から皆名乗っている。となりました。

やっている事はUI Designの一部もしくは全部で、UI Designと全く違う特別な技術体系や学問体系がある訳ではなさそうです。

例えば、Data ScientistはData Scienceと言う学問があり、それを修めた人がその学問が定めた技術体系に基づいてDataを集めたり整理したり、そこから結論を導いたりします。

そういうのはUX Designにはなさそうです。

となると、UI Designを勉強するためには実際にGame のUIを作成している人達が作成したTutorialを見るのが唯一の方法になりそうです。

あっ。

きっとそれですよ。

だから統一性がないんですよ。GameのUIには。全てのGameに通じる原理が無いです。それぞれのGameのUIはそれぞれ別な方法で作成されているんです。

作って見たら、駄目だった。

それじゃこう直そう。

こっちを直したらこっちが駄目になった。

じゃあこうしよう。

みたいな感じでそれぞれのGameで独自の発展をしていったですよ。本当は。

じゃどうするかと言うと、自分で作成しながら勉強して行くのが一番正しい方法になると思います。

それ見てDesignerの人は、このUIはここが間違っているって言うかもしれませんが、間違っていても良いんですよ。そのGameのUIにとって、それが正解なら。

はい。

それじゃ来週から実際にUIを作成してみます。

10.Blenderの勉強

今週は本当にもう時間が無くなってしまいました。Blenderの勉強する時間は全く取れなかったです。

本当は、今週はBlenderでアニメ調のRenderingをしているTutorialを見つけたので、それを勉強したかったのですが、諦めます。来週やります。

11.まとめと感想

最後の部分は本当に駆け足で終わらせてしまいました。

こういう時は、来週に回す事も考える必要があるかもしれません。

12.参照(Reference

[1] CGHOW. (2021, March 18). All Velocity Modules in UE4 Niagara Explained [Video]. YouTube. https://www.youtube.com/watch?v=LiCYRpYffko

[2] UE Memorandum. (2021, December 13). 【Niagara入門】ForceとVelocityの違いと使用する際のポイントなど【Unreal Engine】 [Video]. YouTube. https://www.youtube.com/watch?v=DZsmqacji7s

[3] CGHOW. (2022b, May 18). Mesh Flipbook in UE5 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=zJf1extn3kE

[4] Cloward, B. [Ben Cloward]. (2022b, April 28). Random UV Transforms - Shader Graph Basics - Episode 44 [Video]. YouTube. https://www.youtube.com/watch?v=b4tAG5gz_Ls

[5] Cloward, B. [Ben Cloward]. (2022a, February 24). Random Noise - Shader Graph Basics - Episode 35 [Video]. YouTube. https://www.youtube.com/watch?v=5v6tvkb63XU

[6] UnrealCG. (2020, June 25). Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mx_AvrZK3TA

[7] MR3D-Dev. (2020, September 9). Unreal Engine 4: Ultimate Beginner’s Guide to Runtime Virtual Texture Blending (RVT) [Video]. YouTube. https://www.youtube.com/watch?v=_u-HdkJ3woE

[8] Epic Games. (n.d.-b). Runtime Virtual Texturing Quick Start. Unreal Engine Documentation. Retrieved May 29, 2022, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/VirtualTexturing/Runtime/QuickStart/

[9] Unreal Sensei. (2021, April 23). How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=xYuIDFzKaF4

[10] Klaus. (2022, January 18). Gaea Beginner Tutorial Series : Part 3 - Basic Texturing [Video]. YouTube. https://www.youtube.com/watch?v=I_XbMsL24AI&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=3

[11] CodeLikeMe. (2020, November 30). Landscape Deformation in Unreal Engine II - Snow Deformation [Video]. YouTube. https://www.youtube.com/watch?v=XM8evH-T7U0

[12] RP Monkey. (2020, June 6). [Free Download] UE4 Runtime Virtual Texture Dynamic Snow Displacement [Video]. YouTube. https://www.youtube.com/watch?v=jdi_37r1zcE

[13] Marvel Master. (2020, June 19). Unreal Engine Basic Dynamic Snow Tutorial - with Runtime Virtual Textures - UE4.25 [Video]. YouTube. https://www.youtube.com/watch?v=YwNJUTz2L-U