UE4の勉強記録

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

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

<前文>

<Julian Assangeについて報道しない日本>

先週、こんなに英語圏で問題になっているアメリカの中絶問題について、日本では全く報道されないのが不思議だと述べました。ところで世界中では問題になっているのに日本で全く報道されないNewsがもう一つあります。

それはWikiLeaksの創設者であるJulian Assange氏がイギリスからアメリカに送還されて140年くらいの禁固刑にされる事です。

Julian Assange氏はもしアメリカに送還されるのなら、その場で自殺すると宣言しています。

Julian Assange氏への容疑は色々言われていますが、アメリカの政府高官や政治家などのRuling Classが本当は何をやっているのかをバラした事に対しての復讐でしょう。

彼が共和党民主党のどちらかよりの政治的なStanceをとって敵対する側のLeakだけやっていたら、こんな事態にはならなかったのかもしれませんが、Julian Assange氏、どちらに対しても手加減なしで情報公開しまくったので両方から恨まれる羽目になってしまいました。

彼の行いは、違法であり、しかもモラル的にも問題があるかもしれませんが、彼のWikiLeaksのおかげで、我々庶民は政府高官や政治家などのRuling Classが本当は何をやっているのかを知る事が出来たのも又事実であります。

もしJulian Assange氏がアメリカに送還される事が決まって、彼が自殺したら、もう誰も政府高官や政治家などのRuling Classの情報をばらす人は居なくなってしまうでしょう。そうなってしまったら政府高官や政治家は自分達に都合の良い事実しか報道させない事が出来るようになってしまいます。

西側諸国がRussiaや中国などの独裁国家との大きな違いは報道の自由が有る事です。

これ日本人のほとんどは勘違いしていますが、報道して良い事を報道する自由は中国でもRussiaでもあります。Journalismが政府からの独立が保証され、かつ政府からの干渉がない事、更に政府に対して批判的な内容でも報道出来るのが、自由主義国家と独裁国家との違いなんです。

つまりJulian Assange氏がアメリカに送還される事が決まって、彼が自殺したら、それは自由主義国家のリーダー的存在であるアメリカが報道の自由を保障しないと宣言した事になる可能性が出て来る訳です。

ここで、この問題について面白い事を紹介している記事がありました。

それのAddressを無くしてしまったんですが、内容は、アメリカの奴隷制度、特に南部の奴隷による綿花の生産高を計算したら一人当たりの生産高が物凄い低かったそうです。これだったら当時の技術でも自由に競争させるだけで、奴隷を全く使用しなかったとしてもそれ以上の綿花を生産出来たらしいです。

この自由に競争させると言う行為は、古今東西を問わず、支配階級はあまりお好みではありません。しかしそれをやらなければ軍事技術や経済力がどんどん他国より劣っていって最終的には他国に侵略されてしまいます。

アメリカの南部も例外ではなくAmerican Civil Warで南部はボロボロにされ、南部の支配階級はその後、奴隷主であるというアメリカの歴史の恥として永遠に蔑まれる存在になってしまいました。

だから、アメリカはJulian Assange氏を刑務所に永遠に閉じ込めて置く事は出来きますが、それ以外の国が自由競争の原則に即してJulian Assange氏のWikiLeaksを受け入れた場合、アメリカは軍事技術や経済力がどんどん他国より劣っていって、国としては終わる可能性がある。と。

この記事は大変、示唆に富んでいて、何で日本が30年間、経済成長がしなくなったのかの答えを示している可能性もあります。

日本は青色ダイオードの発明を代表に、自由競争で生まれた新しい技術を積極的に潰すようになりました。奴隷制度があった時のアメリカ南部と同じです。日本全体が自由な競争を受け入れて発展するのではなく、当時のアメリカ南部と同じ様に単なる奴隷を求め始めました。その結果、Innovationする人達がいなくなって、日本そのものが自由競争で勝てない国になってしまいました。

と言う可能性はありそうです。

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

<本文>

1.今週の予定

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

  • Online Learningの行方について
  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGStoryの改善
  • Map1Bugの直し
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • UI Designの勉強
  • Blenderの勉強

2.Online Learningの行方について

これは先週やりたかったんですが、時間が無くなってしまって出来なかった内容です。公式のOnline Learningの幾つかはとても質が良くて大変勉強になっていたんですが、LauncherからOnline LearningのPageへ行く方法が見つからなくなってしまっています。

のでOnline Learningが無くなってしまったのか、それとも単に場所が変わっただけなのか調査する事にしました。

Unreal Engineの公式のPage [1]を見ると

Learnは普通に載っています。

中身を見ると色んな選択がありますが、Online Learningそのものはありませんね。

Learning resourcesの中にOnline Learningがありそうです。

ありました。

中を見てみます。

普通にありますね。

普通に見れますね。

あ、あれだ。

前のVersionではどのTutorialをどこまで勉強したとか、勉強し終わったTutorialの一覧表とかが見えるPageがありました。

勉強中のTutorialが何処まで勉強したのかが分かるPageは勉強の復習にかなり役立っていたんですがそれが見つかりません。

うーん。もしかするとUE5へ移行するのでSite自体を作り直している最中なのかもしれませんね。

暇なときに色々見る事にします。

3.Niagara: CGHOW氏のTutorialをやる

今週からUE5 Niagara & Custom Stencil Buffer Tutorial | Download Files [2]を勉強する事にします。

Custom Stencil Bufferを使用しているそうなのでこれを勉強する事にしました。

ただし30分以上もあるTutorialなので今週は半分だけやる事にします。

3.1 UE5 Niagara & Custom Stencil Buffer Tutorial | Download Files [2]を軽く見る

まず、Tutorialを軽く見て、何が必要なのかどんな勉強方法が適切なのかを判断します。

17分程度まで見ました。Tutorial通りやれば普通に出来そうです。別に自作のMeshを使用したりとかはしていませんでした。

Custom Stencil BufferについてはこのTutorialでは解説しないので以下のTutorialで勉強して下さいとありました。

一応、見てからこのTutorialを勉強する事にします。

3.2 Custom Stencil Bufferについて勉強する

How to Create Masks With the Custom Stencil Buffer | Tips & Tricks | Unreal Engine [3]を勉強する。>

途中まで見ましたが、基本的な内容は2022-04-11のBlogで勉強した内容以上のものはありませんでした。

一応、最後まで見ました。

唯一、知らなかった事は、Custom Depth Stencil Valueの値が、

本当にRGBの値としてセットされていて、

Custom Depth Stencil Valueの値が1にセットされているStatic Meshから1を引くと0になる事でした。

後、どうでも良い事かもしれませんが、棒読み感と言うか、これを解説している人が本当に理解して解説していない感が凄かったです。本当にこれ解説している人が作成したTutorialなんでしょうか?なんていうか丸暗記感が凄いです。

3.3 UE5 Niagara & Custom Stencil Buffer Tutorial | Download Files [2]を勉強する

今回の勉強で大切な事は、Custom Stencil Bufferと言う一般的にはPost Process用のMaterialのみで使用される機能を、普通のStatic MeshのMaterialに使用したり、Niagaraの様なParticle Systemと併用して使用したりする事が可能であるという事です。

当然、

  • どのような条件ならCustom Stencil Bufferが一般のStatic Mesh用のMaterialとして使用出来るのか?
  • 他のScene Bufferも同様に一般のStatic Meshに使用されているMaterialに使用出来るのか?
  • Niagaraに使用される場合の制約はどんなものがあるのか?

を理解する事が重要になります。

単純に「Tutorialを説明通りにやったら出来ました。」としていたら、あんまり自分の勉強にならないのでその辺に気をつけて勉強していきます。

まずEmpty Levelに以下のActorを追加してLevelを作成しています。

これは別に作成する必要は無いですが、新しいLevelを作成する時は、いつもTemplate_Defaultを選択して作成してしまい、UEのLevelを構成する必須Actor達を全然理解していないので、これもやってみます。

Empty Levelを選択します。

このProject、UE5がPreviewの時に作成したんですが、そのせいか、このNew Levelの表示が一寸だけ普通のUE5のProjectと違っています。

まあ、問題になる事はないと思いますのでそのまま使用していきます。

Directional LightとExponential Height Fogを追加しました。

うーん。

何の変化もない!

Directional Lightは兎も角、Exponential Height Fogは何をするActor何でしょう?

折角、Levelの作成から実装しているですから、調べる事にします。

公式DocumentであるExponential Height Fog [4]には

と説明されていました。

有りと無しで以下のような違いがあると解説されていました。

うーん。今回のLevelにはあんまり必要のない機能のような。

まあ、気にしないで先に進みます。

次にStencilが使用出来る様に、Project SettingのRenderingのCustom Depth-Stencil PassをEnabledにします。

これは、前にStencilを使用した時にセットしていました。

CornをLevelに追加しました。

む、何これ?

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

あー。

Exponential Height Fogが何かしている訳か!

TutorialのExponential Height Fogの設定がどうなっているのかは全く分からないので、適当に弄ってみます。

Volumetric FogにCheckを入れると

背景がTutorialと同じ様な灰色になりました。

Exponential Height Fogの設定を色々弄ったんですが、Cornが真っ白になる事はありませんでした。

仕方ないのでDirectional LightのRotationの値を弄ってCornを白く光らせました。

まあ、当たらずとも遠からずでしょう。

続きをやります。

今度はView ModeをCustom DepthにセットしてCornが見えない事を確認しています。

何でCustom StencilじゃなくてCustom Depthなの?

因みにCustom Stencilの場合も結果は同じです。

CornのRenderingの設定を以下の様にしました。

Custom StencilではCornは真っ黒のままです。

Custom DepthではCornが見える様になりました。

あれ?何で?

2022-04-11のBlogを読み直したら以下の様に書いてありました。

先程のCustom Depth Stencil Passですが、Enabled じゃなくてEnabled with Stencilでした。

Tutorialを見直したら、Enabled with Stencilを使用していました。

うーん。

間違えていた。

Tutorialの方ですが、Stencilの設定を追加しないで新しいMeshをLevel上に配置しています。

何と、Tutorial、CornのRender Custom Depth PassをOffにしてしまいました。

???となっていると説明がありました。

このCornをこのPlaneを通して見た時だけ、Visibleにしたいそうです。それをこれからやって行くそうです。

あ。分かりました。

今まではStencil Bufferの説明をしていたんですが、これから今週のNiagaraの実装に入る訳です。

Planeを以下の様に並べました。

Plane用のMaterialを作成します。

TutorialでこのMaterialの名前をPlanerとしていますが、

Planerって以下のような工作機械を指すはずなんです。

Planarだと以下に示した様な

「平面の」と言う意味です。

因みに、Plannerだと計画を作る人になります。

PlanerとPlanerは同じ発音で、プレイナーと言います。Plannerはプランナーです。

平面はPlaneが最も適切と言うかPlane以外間違っています。更にこのPlane、飛行機を意味するPlaneと同じ単語です。

うーん。

でもCGHOW氏はPlanerをPlaneと同じ意味で使用していますね。そういう意味もあるのかもしれません。

Plane用のMaterialを作成しました。名前はM_MyPlaneとしました。

Allow Custom DepthにCheckを入れます。

Planerに適用します。

そしてPlaneのRender in Main PassとRender In Depth PassのCheckを外します。

Planerが見えなくなりました。

今度はCornのMaterialを作成します。

色は以下の様に単純に指定します。

今度はOpacityを指定します。

ここが、このTutorialの肝で、Planeを通して見た時だけOpacityが1になりそれ以外は0になるように実装する訳です。

どうやって実装するのか見て行きましょう。

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

うーん。成程。

この実装見る前に一寸だけ自分で考えてみたんですが、CameraからRayを飛ばさないととか考えていました。Scene Textureの段階で既にCameraから見たImageがTextureになっている訳で、それをそのまま使用すれば良い訳ですね。

このMaterialをCornに適応します。

TutorialではPlaneを通して見た時だけ緑のCornが見えます。

私のは単にCornが透明になってしまいました。

ここの設定が間違っていました。

これさっき直すの忘れていました。

今度は出来ました。

今度は、NiagaraのFountainに使用します。

Render SectionのSprite Renderer Moduleの

MaterialにM_Cornをセットします。

結果です。

凄いNiagaraも全く同じMaterialを使用してPlaneの場所だけVisibleに出来ました。

色々微調整して以下の様になりました。

Tutorialのは光っていないですが、その直し方は分かりませんでした。

Tutorialに従ってM_Cornの実装を以下の様に変更します。

Radial Gradient Exponentialノードを使用しています。これでOpacityの形状は丸くなるはずです。

結果です。

CornはTutorialの指示に従って消しました。

以下にTutorialの結果を示します。

まあ、大体同じでしょう。

今度は、Planeの枠を作成します。

まずは枠のMaterialを作成します。

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

結果です。

枠が出来ていますね。

Blogの何処かでこういうTexCoord[0]の操作方法をまとめたはずです。一寸探してみます。

2022-01-24のBlogでまとめていました。

と言っても枠抜き、円形、そして三角形の3つだけですが。

One MinusとPowerを追加して

以下の様にします。

以下のCodeを追加しました。

作成した枠をFancyにする実装です。

ただしNoizeに関してはTutorialのようなのは持っていないのでこのProjectに付属のNoiseで代用しました。

ここで新しいPlaneを前のPlaneからDuplicateして作成して、今作成したMaterialをセットします。

TutorialではこのDuplicateしたPlaneが透明なままで、CGHOW氏、最後はしびれを切らして新しいPlaneを作成してそれにこのMaterialを追加しています。

以下の2つのParameterを元に戻さないからPlaneが消えたままなんじゃないのと思ったので、

試してみました。

出来ていますね。

見た目を良くします。

Particle Update SectionにScale Sprite Size Moduleを追加します。

Uniform Curve SpritのTemplatesの赤丸で囲った部分をClickしてCurveを以下のように変更します。

更にParticle Spawn SectionのInitialize Particle Moduleの設定を

以下に示したように色々弄りました。

結果です。

今週はここまでとします。

3.4 UE5 Niagara & Custom Stencil Buffer Tutorial | Download Files [2]のまとめと感想

まだTutorialは半分しか終わっていませんが、以下の疑問に対しての解答は得られたのでそれをまとめます。

<どのような条件ならCustom Stencil Bufferが一般のStatic Mesh用のMaterialとして使用出来るのか?>

Custom Stencil Bufferは、特別な条件が無くても、普通のStatic Meshに使用するMaterial内で使用する事が出来ました。

<他のScene Bufferも同様に一般のStatic Meshに使用されているMaterialに使用出来るのか?>

これは試していませんが、出来ると思われます。

Niagaraに使用される場合の制約はどんなものがあるのか?>

ないです。

全く普通のMaterialと同じに扱う事が出来ました。

4.Materialの勉強

4.1 Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [5]の続き

今週はFoliageからやって行きます。

以下の草がFoliageで作成されています

そしてこれがその草に使用されているMaterialです。

うーん。これって実際にあるPhotorealisticな草をToon調に変換しているんでしょうか。

試しにやってみます。

これをDuplicateしてやってみます。

Materialをこんな感じで作成しました。

これを先程のGrassにMaterialとしてセットすると以下の様になります。

うーん。出来た?

Foliageを使用して草を配置します。

結果です。

うーん。良い感じです。

近づくとこんな感じです。

良いんじゃないでしょうか。

微調整しました。

良い感じです。

もうちょっとだけ微調整しました。

<Rim Glow Effect>

次はRim Glow Effectを作成します。

これTutorial、途中まで間違えた形の実装をして最後に直しているので最後の実装と同じ形を最初から作成します。

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

DistanceでRim Glowが掛かる距離を調節出来ます。

結果です。

良い感じが出ています。

Play画面です。

Rim Glow Effectを緑色で指定したんですが、山が緑色になっています。

一寸、大袈裟過ぎるかもしれません。

2022-04-25のBlogを見ると

と書いていました。

これ以下の部分でLerpのAlpha値を決めています。

この部分が純粋に距離に比例しているので、単に遠い所だけ色が付くようになっています。

そんだけです。

Beef Saturation Effect

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

実装の内容についてはTutorialの説明で十分理解出来るのでここではやりません。

結果です。

Play画面の結果です。

かなりアニメ調になっています。

やっぱり彩度を上げるとアニメっぽくなります。

影の部分を増やして見ました。

影の部分を濃くしてみました。

まあ、有りと言えば有りですね。

これでToon Shader & Custom Shadow - UE4 Postprocess Tutorial [5]は完成しました。

今週はここまでとして、来週からParameterの調整などを行います。

4.2 Ben Cloward先生のTutorialの何かをやる

久しぶりに戻ってきたらProjectionのTutorialの後にInterior Mappingと言うTutorialのCourseが完成していました。

これを今週からやって行きます。

今週は最初のCreating Cubemaps - Shader Graph Basics - Episode 33 [6]をやります

4.3 Creating Cubemaps - Shader Graph Basics - Episode 33 [6]を勉強する

<軽く見る>

今週のTutorialはどうやってCube mapをUEにImportするかについてでした。

最初はSky にCube Mapを使用する方法を習うのかと思いましたが、実際はMaterial内でCube MapをTexture Sample ノードを使用して呼び出して以下の様に球状のStatic Meshに歪みなく貼り付ける方法を教えていました。

この技術を使ってこのTutorialのSeriesでは何か凄い事を教えてくれるみたいです。

以下のActor達が何をやっているのかを勉強しないといけないと思っていますが、まだ勉強していません。

この辺をCube Mapを使用して作成する勉強をするのかと思っていたんですが、これは違いそうです。

ここからが一寸問題なんですが、UEにImport出来るCube Map用のImageを作成するために

のPlug-inをPhotoshopにセットする必要があるそうです。

Photoshop持ってない私はどうしましょうか。

Tutorialを良く聞くと、UEではDDS formatしかImport出来ないからこのPlug-inが必要と言っています。

うーん。

それだけならPhotoshop無くても何とかなりそうです。

後、Cube Mapのそれぞれの写真の並びが以下の様にしなければならない事です

まあこれはConventionだからと納得すればそんだけの事です。

この辺の問題を解決出来れば実装そのものは簡単みたいです

Cube Mapを作成する>

このTutorialでも紹介されていた公式のDocumentであるCreating Cubemaps [7]に以下のCube Mapが使用されています。

これをSaveしてDDSに変換します。

まずこのImageをSaveしたらwebpと言う聞きなれないFormatでした。

Onlineにあるサイトでwebpをddsに変換します。

これをUE5にImportします。

Errorが出てImport出来ませんでした。

うーん。

これは困りましたね。

この後、色々調べたんですが、

  • UEの基準を満たすDDSに他のFormatから変換する事が出来るSoftwareは私のPCでは動きませんでした。
  • Online で無料で出来る他のFormatからDDSへの変換も無理でした。
  • 直接、UEで使用出来るDDS formatCube MapをネットからDownloadしようとしましたが、これも見つかりませんでした。

もっと深堀して、shenaniganな方法を採用すれば出来なくはないと思いますが、そこまでしてやりたくないのでこのTutorialは一端中止します。新しいPCが手に入ったらやる事にします。

5.RPGStoryの改善

5.1 先週までの復習

先週は、今まで徒然なるままに書き殴っていたStoryをもう一回書き直すとしてStoryを読み直す途中で、12使徒が何をした人達なのかを調べたり、その過程でパウロが13番目の使徒である事を知ったりしました。

私はアメリカにいた時は教会に通っていたんですが、アメリカ人にとって、こういう話は余りにも常識過ぎたらしくて誰も説明してくれませんでした。

その中でパウロの話だけはしてもらったのを覚えています。

それをここにまとめておきます。

パウロは最初キリストを信じていませんでした。そしたら目に鱗のようなものが貼りついて失明してしまいます。これはキリストを信じなかったからだと感じたパウロは一生懸命、祈ってキリストに謝罪します。すると目に貼りついた鱗がとれて目が見える様になりました。この事件がきっかけでパウロキリスト教徒になります。

ここからパウロの話面白い所です。

パウロユダヤ人じゃなくてローマ人なんです。当時、世界を支配していたローマ人達にとってユダヤ人は反乱を起こさないで税金をしっかり払ってくれればそれ以外はどうでも良い存在だったんです。所がユダヤからしたら全然違う訳です。ローマ人は世界を支配する民族でしかもユダヤ人が住んでいる場所も支配しています。ローマ人に気に入られるかどうかは、ユダヤ人の人生に大きく影響する訳です。

当然、ローマ人はユダヤ人の言語なんか理解しません。逆にユダヤ人はローマ人に気に入られようと一生懸命、ローマ人の言語であるラテン語を勉強します。

ローマから委託されてユダヤ人の国家を運営しているユダヤ教の司祭たちは新興宗教であるキリスト教が気に入らない訳です。自分達の利権を奪う存在に見える訳です。

それで彼等はローマに今の我々の国にこんな変な集団が現れている。ローマに対して反乱起こすかもしれない。ローマは直ぐにキリスト教を取り締まるべきだと。報告します。

それ聞いたローマ人が、そんなにユダヤ教の司祭が言うなら、一寸調査位しておくかとなります。

その時にローマ人であるパウロがローマに現れて、ネイティブのラテン語で他のローマ人に対して、キリスト教ってのはこういうものです。ユダヤ教の司祭たちが言うように、ローマに対して反乱起こすかもしれない変なモノかどうか自分達の目で確認して下さーい。と

ローマ人だって、ユダヤ教の司祭の訳わからんラテン語の説明より、同じローマ人であるパウロの説明の方を信頼します。しかもローマ人がキリスト教に対してどんな疑問を感じるのかもパウロならよく分かります。

そしてローマ人の間でキリスト教が爆発的に広まるようになる訳です。

当時の過激な新興宗教であったキリスト教は、こうやって利権集団であるユダヤ教と戦っていった訳です。

当然、皆の知る通り最後は、キリスト教はローマの反乱の元になりえるとされて、パウロも最後は処刑されてしまうんですが、単なるFictionだとしても最上級の面白さです。

当時、この話を聞いて、アメリカがローマ帝国で、日本はユダヤ人の国家と同じだと思いました。

それを、アメリカ人の友達に行ったら、にやにやしていました。

それを見て私は、当時のユダヤ国家がローマから運営を任された司祭たちが支配していたように、今の日本がアメリカから運営を委託された人達が日本を支配しているのが事実である事を理解しました。

まあ、こんな訳でパウロの話はとても私の心に残っています。

5.2 序章のEventのシナリオを作る

序章に入れるべき内容は、以下の様になっています。

Eventの始めは、この番人と話した時に始まる事にします。

Pause画面にEventを追加して、Playerが何をしなければならないのか分かるようにします。

更にEvent開始時にはEventが開始された事を知らせるUIを表示します。

Storyは以下の様にします。

<序章:最初の村>

赤い帽子の魔女に、月想界に飛ばされたジョバンニは、月想界を構成する星屑世界の中で、最も小さい世界である最初の村に着きます。

その世界にも、太陽界に住む悪魔から送られてきたMonsterが徘徊していてます。

祠の番人がいるので、話しかけると「Monsterに捕まると太陽界に連れて行かれてそのMonsterと一対一の決闘を強いられる。その決闘で相手のMonsterを殺せばこの世界に返ってこれるが、ほとんどの場合はMonsterに殺されてしまう。武器を持っていればMonsterでも倒せる場合もある。」と教えてもらえます。

「正し武器が買えるのは、奥にある村に行く必要があるが、奥にある村に行く道にはMonsterが徘徊していて、そのMonsterを倒さないと奥の村に行くのは不可能である。」とも言います。

ここでEventが発生します。

‐序章:武器を手に入れろ‐

です。

裏道を見つけて、最初の村についたジョバンニは、武器屋に行きますが、武器を買うお金が無い事に気が付きます。

村人と会話をしていると、ある老人がこの村の回りに生えている薬草を道具屋が買ってくれる事を教えてくれます。ただし薬草の買い取り値段は、武器の値段の100分の1で薬草を100個集める必要があります。

宿屋で寝ると、前に薬草を取った場所に新しい薬草が生えている事を知ります。ただし宿屋に泊まるにはお金が掛かります。

朝になると前に薬草を取った場所に新しい薬草が生えている事も知ります。

山のふもとで薬草を取っていると、老人が立っているのが見えます。その老人に話しかけると、その場所から山に登る事が出来る事を教えてくれます。

そこから山を登ると、なんと武器:短剣が有りました。

ジョバンニは短剣を手に入れました。

その短剣を装備してMonsterと決闘すると、ジョバンニはMonsterを倒す事が出来ました。

5.3 序章:最初の村の推敲

書いていて、まず思ったのが村の名前です。最初の村は名前としてはオカシイし、覚えにくいです。ここでこそFruitの名前を使用しましょう。

イチゴ村にしましょう。

後、星屑世界の名前は、色で決めるとしました。でもこれだと魔女の帽子の色と被ってしまいますね。

うーん。どっちも捨てがたい。

星屑世界の名前は形容詞にしますか、小さな世界、灼熱の世界、何もない世界、森と泉の世界、砂漠と岩の世界、みたくしますか。

ゲームの設定を矛盾なく考えるのも大変ですね。

以下の様にStoryを直します。

<序章:武器を手に入れろ>

赤い帽子の魔女の願いを聞く事にしたジョバンニは、赤い帽子の魔女に星屑世界の一つである小さな世界に送られてしまいます。

その世界には、太陽界に住む悪魔から送られてきたMonsterが徘徊していてます。

祠の番人がいるので、話しかけると「Monsterに捕まると太陽界に連れて行かれてそのMonsterと一対一の決闘を強いられる。その決闘で相手のMonsterを殺せばこの世界に返ってこれるが、ほとんどの場合はMonsterに殺されてしまう。武器を持っていればMonsterでも倒せる場合もある。」と教えられます。

「正し武器が買えるのは、奥にあるイチゴ村に行く必要がある。しかし奥にあるイチゴ村に行く道にはMonsterが徘徊していてMonsterを倒さない限りその道を通る事は出来ない。」とも言います。

ここでEventが発生します。

‐序章:武器を手に入れろ‐

です。

裏道を見つけて、イチゴ村についたジョバンニは、武器屋に行きます。しかし武器を買うお金が無い事に気が付きます。

村人と会話をしていると、ある老人がこの村の回りに生えている薬草を道具屋が買ってくれる事を教えてくれます。ただし薬草の買い取り値段は、武器の値段の100分の1で薬草を100個集める必要があります。

宿屋で寝ると、前に薬草を取った場所に新しい薬草が生えている事を知ります。ただし宿屋に泊まるにはお金が掛かります。

朝になると前に薬草を取った場所に新しい薬草が生えている事も知ります。

山のふもとで薬草を取っていると、老人が立っているのが見えます。その老人に話しかけると、その場所から山に登る事が出来る事を教えてくれます。

そこから山を登ると、なんと武器:短剣が有りました。

ジョバンニは短剣を手に入れました。

その短剣を装備してMonsterと決闘すると、ジョバンニはMonsterを倒す事が出来ました。

――

うん。

こんな感じで良いと思います。このMonsterを倒す事が出来ると次のEventが始まる訳です。

5.4 第一章のシナリオを作る

先週までで以下のシナリオを考えていました。

これを改良しましょう。

村人AはHenchmanにしましょう。偉い人の腰巾着の事をHenchmanと言うと思っていたんですが、この前、あるアニメを見ていたらMinionと訳されていました。

気になって調べたらHenchmanは別に権力やお金がある人に限らないで立派な人などに忠誠を誓っている人を指すらしいです。一方で、Minionは権力やお金があるからその人に忠誠を誓う場合に使うそうです。更にMinionと言う場合は、その人は無能である場合が多いそうです。

うーん。知らんかった。

腰巾着の態度ですが、

  1. 最初に話しかけた時:横柄で生意気な態度
  2. ジョバンニが薬草を集めている時:何かを必死で探している
  3. ジョバンニがMonsterを倒した後:ジョバンニに内緒のお願いをしてくる。Event発生。

とします。

腰巾着はジョバンニに以下の話をします。

俺は、村長の大事な預かり物を何処かに落としてしまって今困っている。この村は隅々まで探したしが見つからなかった。隣の世界に行った時に落としたに違いない。隣の世界に言って、○○を探してきてほしい。

と、ジョバンニが断ると、腰巾着はこう返してきます。

お前は「金の切符を探しているんだろ。」。

この村の人間は金の切符に関係するある秘密を知っている。しかしそれをよそ者に言う奴はいない。その秘密を俺が教えてやる。と言います。

そして、隣の世界に行く時に、沼には近づくな。とんでもない強いMonsterがいるし、腰巾着は沼には近づいてないからそこには○○はない。と言います。

もう、この時点で二つ名前が無いです。

隣の世界と腰巾着の落とし物です。

隣の世界は、海と小さな島の世界としますか。

落とし物は金の延べ棒にしましょう。腰巾着が、村にたむろっているハンターたちに頼めない理由になります。もし腰巾着がハンターたちに、海と小さな島の世界で、金の延べ棒を落としたから取って来てくれと頼んだら、ハンターたちは海と小さな島の世界に行って金の延べ棒を取って来ますが、腰巾着に渡さずに自分達の物にしてしまうからです。

うーん。

世界の名前がピンと来ません。ここで一端中止して世界の名前について来週まで考えます。

6.Map1Bugの直し

今週は以下の3つを直します。

  • 封印された石像のボタンがDefaultのまま
  • 道具を使用した時にCommentが表示されないため、本当に道具を使用したのかどうかが分かりにくい
  • 道具は何個持てるのかについての制限

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

直しました。

ついでにReward ButtonがDefaultになっているのも直しました。

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

新しいWidgetを作成し、道具を使用した時にこれを表示します。

Widget Item内にButtonがClickされてItemを使用する時に上記のWidgetが1秒間、表示されるようにしました。

Play画面です。

一秒経つとこのWidgetは消えます。

後、音を追加しても良いと思いました。効果音は後で追加します。

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

道具は30個まで持てる事にします。30個を超えた場合は持てなくなります。

道具袋にItemが30個入っているにもかかわらず道具屋で新たな道具を買おうとした場合、

を表示します。

実装です。

テストします。

となりました。

今度はItemを拾う時です。

先程と同じ実装をPick Up Itemに実装しました。

テストします。

道具袋を一杯にしました。

出来ていますね。

Monsterを倒した後の褒美の場合です。

Get Items Widget

報酬で得たItemを道具袋に追加する実装部分に追加しました。

結果です。

「道具袋は一杯です。」が表示されません。

以下の様に直しました。

この原因は、Loopの中身が終わる前に次に実装が実行されるからです。

「道具袋は一杯です。」が表示された場合は、次の実装を開始するまで1.2秒待つようにしました。

テストします。

今度は表示されました。

これで道具は30個以上持つ事は出来なくなりました。

6.4 戦闘帰還時の生成場所の変更

戦闘から帰って来た時に、前居た場所から100cm程高い位置に帰還するようにしました。

これは仮なので後でまた変更するかもしれません。

7.Open Worldの検証

今週は先週、終わらなかったHow to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [7] の勉強の続きをやっていきます。

7.1 先週までの復習

先週までの復習と言っても、2回しか勉強していませんが、同じ事を繰り返しても勿体ないので復習を最初にします。

2022-05-09Blog

この週は、Tutorialを見てその内容をまとめていました。その内容はほとんどはVirtual Textureを使用した実装方法についてですが、何故、Landscape作成においてVirtual Textureを使用しなければならないのか。とかVirtual Textureの理論についての解説もありました。

更に、このまとめにおいてVirtual TextureはLandscape上に配置されたStatic Meshに対するLandscapeに使用されているMaterialのProjectionである事が分かります。

そこで以下の部分の実装方法に疑問が出てくる訳です。

以下のStatic MeshのImageの歪みはLandscapeに使用しているMaterialのNormal MapをProjectしている事から生じる歪みです。

この歪みを直すにはBen Cloward 先生のTriplanar Projection Normal Maps [8]を使った方が綺麗になるんじゃね。

勿論、完璧にNormal MapをProjectionする方法はまだ確立されていない訳で、Ben Cloward 先生のTriplanar Projection Normal Maps [8]も全てにおいて完璧とは言えません。言えませんがNormal MapをProjectionする方法で現状、Better than any other techniqueでしょう。

この辺を検討したいとありました。

2022-05-16のBlog

先週は実装を終わらせようとしたら、Rural AustraliaをImportするのに時間が掛かり過ぎて終わらせる事が出来ませんでした。TutorialのAdd Height Informationの最後辺りで中止しました。

7.2 How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [7] の実装の続き

<Add Material Information

倒木に使用されているMIのParentであるM_Nature_01の実装からやって行きます。

Runtime Virtual Texture Sample Parameterノードを使用してLandscapeの情報をGetします。

上記の実装をした後で、倒木に使用されているMIであるMI_Log_L_01のVT Mat LandscapeにVT_Matをセットします。

すると倒木のMaterialが以下の様になります。

私はあんまり良く分からないですが、TutorialによるとこのTextureはテカり過ぎてるそうです。

言われてみればそういう気もします。

この原因はRoughnessの値が投影されていないからだそうです。

こんなの本当に先々週、勉強したっけ。何かとっても新鮮な内容なんですが。

2022-05-09のBlogを見直したらしっかり勉強していました。

直します。

Runtime Virtual Texture Sample ParameterノードのVirtual Texture Contentの値に以下のヤツをセットします。

Tutorialでは、先週作成したRuntime Virtual Texture Sample ParameterノードのVirtual Texture Contentの値も直していました。

結果です。

うお。凄い。

Roughnessがあるだけでこんなにリアルになるのか。

上から見た状態です。

Z軸から見た場合、ProjectionしたNormal Mapに歪みは無いはずです。

この結果でも上から見た時は全く歪みがないですね。

そして今度は以下のProjectionされたNormal Mapの歪みの修正に入ります。

ここで尋常ならざる天才児であるUnreal Sensei氏がどんな方法でこのProjectionしたNormal Mapの歪みを直すのか、Ben Cloward 先生がTriplanar Projection Normal Maps [8]で紹介した以上の方法があるのか、とても興味がある所です。

あれ。

Unreal Sensei氏、この問題を解決するって言って、LandscapeのMaterialとこの倒木のMaterialとのBlendについて話しています。

言っている意味は分かりますが、話題がズレてないですか?

2022-05-09のBlogでも同じような事書いていますね。

ここはとりあえず、Tutorialの言う通りやります。

まず元々この倒木のMaterialだった実装部分のNormalをWorld Positionに変換します。

そしてBlend Material Attributeノードを使用して倒木のMaterialとLandscapeのMaterialを高さに応じてBlendします。

高さに応じてBlendするとは以下の実装がAlphaを担当してると言う意味です。

そしてBlendした後で、NormalをWorld SpaceからTangent Spaceに戻しています。

うーん。

これがProjectionされたLandscapeのMaterialの歪みを取ってるじゃない?

結果です。

なんじゃこれ。

木の部分が青くなっている。

Tutorialの結果は普通です。

直します。

Alphaの計算で最後にSaturateするのを忘れていました。

結果です。

青いのは直りました。

うーん。

これで合っている?

Virtual Blend Heightを0にしてみます。

結果です。

元の倒木のMaterialに戻してみます。

結果です。

こっちの方がゴツゴツしているような気がします。

でも気のせいかもしれません。

一応出来た事にします。

そして元の疑問に戻ります。

これでNormal のProjectionによる歪みは直ったのか?です。

分かり易くするために倒木の全体にLandscapeのMaterialをProjectionしてみました。

全く直っていません。

<Remove Texture Stretching

と思ったら、Unreal Sensei氏、ここからこの歪みを取ると言っています。更にこの歪みはNormal MapをTop ViewからProjectionしているから起きていると、かなり的確な指摘をしています。

これは、Ben Cloward 先生がTriplanar Projection Normal Maps [8]で紹介したやり方とは違うUnreal Sensei氏のOriginalな方法が見れそうです。

その前に2022-05-09のBlogで既にこの部分を勉強していて、すっかりその事を忘れている可能性もあるので、一応、2022-05-09のBlogを確認します。

この部分は何をやっているのか良く分からないから、実装した時考えます。

と書かれていました。

Tutorialで以下の様な解説がされていました。

まずMeshの角度を計算します。その角度が急な奴が歪んだProjectionを投影しています。そいつらをIsolateします。

うーん。

成程。

実装方法を見てみます。

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

Vertex のNormalのZ軸の値が小さい奴、つまりNormal Vectorが横を向いているヤツは値が0になります。

よってそう言う箇所は黒くなります。

うーん。

黒くなったらLandscapeのMaterialのProjectionの影響を受けるんじゃ。と思ったら

その後で反転してました。

危ない。

また間違える所でした。

大体理解しましたが、一応確認のために直接つないでみます。

結果です。

分かり易くするためにUnlitで表示しています。

黒い部分のみがLandscapeのMaterialのProjectionの影響を受けます。

Normal Vectorが大きく歪んでいる倒木側面は白くなっており、LandscapeのMaterialのProjectionの影響は受けません。

Side Contractの値を大きくしても倒木の側面は白いままです。

Virtual Blend Heightの値を上げて倒木全体にLandscapeのMaterialのProjectionを掛けても、倒木の側面は白いままです。

これならLandscapeのMaterialで歪んでProjectされる部分には倒木のMaterialしか表示されなくなります。

納得です。

これはあれです。Ben Cloward 先生のDirection Masks - Shader Graph Basics - Episode 27 [9] と同じ手法です。

実際の結果も見てみます。

微妙にBlendされています。

この辺はかなりBlendされていますね。

歪みは全く見えません。

もっと濃くしてみます。

こんな感じです。

成程。

良く分かりました。

この後は、この実装をMaterial Function化してどのStatic MeshのMaterialにも簡単に実装出来るようにするための説明になりますのでここまで終わりにしてまとめに入ります。

7.3 How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [7] の実装のまとめ

まずVirtual Textureが何であるのかと、その基本的な使い方が理解出来ました。

Virtual Textureと言うのはあるMesh上に実際に存在しているMaterialのDataを他のMeshのMaterialにパスするためのものです。

このTutorialではその一つの実用方法としてLandscapeのMaterialをStatic MeshのMaterial上にProjectionしBlendする方法が紹介されています。

このProjectionで注意しないといけないのがNormal の座標軸です。Tangent SpaceかWorld Spaceなのかしっかり把握する必要があります。

Projectionなので歪みは当然生じます。その対策においてはこのTutorialでは側面の歪みが生じる箇所にはProjection出来なくする事で対応しました。

これで、GDi4KのTutorialも理解出来るようになったはずです。来週はGDi4KのTutorialを見る事にします。

後、LandscapeのLayer毎にVirtual Textureの有り無しを分ける方法を知りたいです。

7.4  歪みのあるNormal 部分へのProjectionに関する考察 

はい。

Unreal Sensei氏の歪みの取り方は雪などの上から積もる場合のLandscapeなら完璧ですが、今回の砂漠のような砂が舞い上がって倒木に砂が混ざる場合、少し違和感を覚えます。

倒木の上に砂が積もっているなら当然側面も砂で汚れるはずです。

以下の図は歪みを取る以前の物ですが、こっちの方が埋もれている感が出ています。

ので歪みが消せるなら倒木の側面もLandscapeのMaterialを投影すべきです。

そこでBen Cloward 先生のTriplanar Projection Normal Maps [8]ですよ。

Ben Cloward 先生のTriplanar Projection Normal Maps [8]の技術を使用してこの倒木の側面も歪まないでLandscapeのMaterialが投影出来るようになったらかなり凄い事になる気がします。

これは来週以降、やる事にします。

8.Gaeaの勉強

8.1 Gaea Beginner Tutorial Series : Part 1 – Interface [10]の続きを勉強します。

今週はAdditional Informationについて勉強します。

Save Incremental

Save IncrementalはSaveするたびに数字が増えていくそうです。

試してみました。

名前をSaveにしてSaveしました。

2回目はSave Incrementalを選択しました。

結果です。

ふーん。これは便利です。

<Export Graph

これはGraph内に作成されたNodeを全部保存する時に使用するそうです。

例えば以下のNodeがこのGraph内に実装されているとするとこれを全部Saveします。

この部分の実装を他のProjectで使用したい時に使用するそうです。

<Undo Redo button

下向きの矢印みたいなのを押すとどの手順まで戻りたいか示してくれます。

<Memory とCache

以下の赤線で囲ったButtonを押すと

こんなBoxが表示されます。

CacheとMemoryの関係が良く分かりません。Cacheってよく使うDataをMemoryのある場所から写して取っておく機能だと思ったんですが。

調べます。

Difference between RAM and Cache [11]に分かり易い解説がありました。

CacheもMemoryではあるんですね。CPU内にあるMemoryを指しています。それに対して私がMemoryだと思っていたのでRAMでした。

<Baked Memory

TutorialではここでBakeしたMemoryを消せるとありますが、

以下のBoxの説明だとBake したCacheは消せないと読めます。

うーん。

確かめたいけどBakeの仕方が分からん。

こいつでした。

Saveしましたが、全然違う場所にSaveされていました。

Clear Allを押しても消えませんし、第一使用量が0になっています。

これじゃ確認出来ません。

どうせ、使わないと思うのでPassします。

<Build Time

Build TimeをClickすると以下のBoxが表示されます。

<Suspend the Engine

製作中に何かGaeaがCrashしそうになったらこのボタンをおしてGaeaを一時停止させるそうです。そしてその値にSaveしてしまうんだそうです。

これ本当に出来るならかなりの便利機能ですね。

実際はFreezeしてこのボタンも押せなくなりそうですが。

<Sample Height

最初、全然高さを表示しなかったんですが、Nodeを選択したら表示するようになりました。

特定のNodeを選択した時だけHeight を表示するのか全部のNodeでHeightを表示するのかは不明です。

やった。

やっとこのTutorialが終わりました。

非常に退屈だったですが、一回はやっておかないと後で復習する時に困ります。何とかやり遂げました。

9.雪山のMapの作成

9.1 先週までの復習

Dynamic Footprint System Part 1/2 - Unreal Engine 4 Tutorial [12] とDynamic Footprint System Part 2/2 - Unreal Engine 4 Tutorial [13]の内容をまとめます。

先週、実装したのですが、どんな風に足跡を作成したのか忘れてしまいました。

なので、もう一回整理する事にします。

  1. 足跡のTextureを作成します。
  2. そのTextureを使用して足跡のMaterialを作成します。
  3. そのMaterialComponentとして保持出来るActorを作成します。
  4. Third Person CharacterMeshPlaneを追加します。このPlaneが足跡を生成する場所を指定します。
  5. Third Person Character Animation Sequenceで足跡を発生させたいものにNotifyを追加します。
  6. 地面のタイプを指定します。
    • Project Settingから地面のタイプを指定する
    • それぞれの地面のタイプに対応したPhysical Materialを作成する。
    • Physical MaterialMaterialにセットする
  7. 足跡を生成する。
    • Third Person Characterに3で作成したActorSpawnするCustom Eventを作成する。
    • Third Person Anim BPを開きAnimation Sequence からNotifyを受け取ったらEventを発するAnim Notify Eventを使用してThird Person Character内で作成したEventを呼ぶ実装を追加します。

あんまり綺麗にまとまりませんでしたが、大体の流れはこんな感じです。

足跡を表示するために必要な幾つかのPointがあります。

<地面の色にあった足跡を生成する>

足跡の色が地面の色と全然違ったらおかしいです。

のでこのTutorialでは色々な地面のタイプを作成しています。そのタイプをPhysical Materialを使用してMaterial毎に指定しています。

LandscapeのMaterialに何個もLayerがある場合はどうしたら良いのでしょうか?

それぞれのLayer毎にPhysical Materialを指定する方法があるかもしれませんが、Virtual Textureを使用しても同じような実装を作成しても良いかもしれません。この辺は実際に自分で実装しないと分かりません。

<Animation Sequence のNotifyを受け取る>

Animation 関連の実装を全く知らないのであんまりはっきりとは言えませんが、Animation Sequence のNotifyを普通のBPが受け取るには、

  1. Animation Sequence Notify
  2. Animation BPAnim Notify Eventを発動
  3. Character BPEvent

の手順でBP間の連絡をやり取りする必要があるみたいです。2と3はひょっとすると要らないかもしれませんが、1と2は必ず必要みたいです。

<Physical Materialについて>

Physical Materialは今回初めて使用しました。

<Decalについて>

MaterialのDecalもほとんど使用したのは初めてです。Material DomainにDeferred Decalをセットした場合、

Result NodeのinputにWorld Position Offsetがあります。

と言う事は、Decalに沿って地面に窪みとかの作成も出来るのでしょうか?

後でその辺を調査します。

9.2 足跡の追加

歩いている時も足跡が表示されるようにします。

歩いてる時のAnimation SequenceであるThird Person Walkを開きます。

NotifiesにNotifyを追加します。

先週作成したNotifyであるFootprintRとFootprintLはこのAnimation Sequenceからでも呼べるんですね。

それが確認したかった。

テストします。

直ぐに走り始めてしまうので、足跡は少しだけです。

出来ているのだけは確認出来ました。

Third Personの移動の速度はどこで管理しているんでしょう?

それが分かればゆっくり移動させる事が出来るんですが。

Third Person CharacterのCharacter Movementにある

以下のParameterが怪しいです。

Max Walk Speedを600から200にしてみます。

テストします。

ドンピシャでした。ゆっくり歩いています。

9.3 足跡にくぼみを追加したい!

最初から勘違いしていたんですが、足跡の窪みを作成するために変形させるのは地面の方で、足跡のMaterialじゃなかったです。

これはこれで別なTutorialがありそうです。

それをまず探します。

いきなりありました。

Unreal Engine 5 - Footprints In the Sand (Landscape Displacement) [14]です。

UE5で作成していますね。しかも作成日が5月5日です。超最近に作成されたTutorialです。

OpenLand Deform Toolkit for Unreal Engine HeightField Mesh Based Trails, Foot Paths, FX (UE5 Ready) [15]も出来そうです。

GDi4K氏のTutorialでした。

うーん。

来週、GDi4K氏のTutorialは何か勉強します。やっぱりGDi4K氏のTutorialはかなり凄い気がします。絶対勉強すべきTutorialかもしれません。

YouTubeのお勧めでSand Footprints in Unreal Engine 4 [17]が出て来ました。

2015年に作成されたTutorialでかなり古いです。

作成方法は、動画じゃなくてリンク先のBlogで解説されています。

このChannelで最後に動画がUpされたのは4年前ですね。

これも追加しておきます。

又、YouTubeのお勧めで別な動画が出て来ました。

Landscape Deformation in Unreal Engine [18]です。

CodeLikeMe氏のTutorialですので内容はしっかりしているでしょう。ただ50分もあります。

10.UI Designの勉強

10.1 それぞれのUIの勉強

今週も先週の続きをやって行きます。

Interface In Game [16]を見ながらそれぞれのUIを勉強していきます。

<Quest

Questってなんの事かと思ったら、具体的な作業が書かれた画面の事でした。

「○○を3個集めよ。」とか「誰々を探せ」みたいな作業が書かれています。

地図と一緒の表示されている画面が多かったです。

<Scoreboard

成績や順位が表示される画面の事です。

Play画面上に2D画面が追加で表示される場合と、2D画面のみで表示される場合の2つのパターンがありました。

成績表を見るのは楽しいですから、こういうのがPlayerのGameをする意欲を掻き立てる訳ですね。

<Settings

Gameの音量やInputの設定などを決定する画面です。大体以下の様な構成になっていました。

<<General>>

言語の設定や、一日の長さ、セリフの表示するスピードなどです。

<<Graphic>>

Graphic 関連の設定をします。

<<Audio>>

音関連の設定をします。

<<Control>>

操作関連の設定をします。

<Skill Tree

これは得た経験値などからどんなSkillを獲得していくかを示すUIです。

昔、これの使い方を一寸だけ勉強しました。

調べたら2020-11-01のBlogで勉強していました。

4.25までしか対応していませんね。このAsset。今更、これを勉強する価値はないかもしれませんね。

製作会社は倒産してしまったみたいです。

やっぱりこの業界、消えていく会社は多いみたいですね。

<Start Screen

これは既に勉強しました。

<Stats

StatsってPlayerが操作するCharacterの状態を示す画面のはずですが、何か全然違うのが表示されたりしています。

後で別なサイトで勉強します。

<Store

RPGなどのお店で武器などを購入する画面とLoot Boxの内容を示す画面の二つがここに分類されていました。

今の道具屋のUIですが、ここに表示されている画面と構成している要素は、そんなに変わらないです。

<Tutorial

うーん。

これは無理やりGame内で説明するよりYouTubeで解説した方が速くて分かり易い気がしますね。

10.2 UIを勉強した感想

ScoreboardはUserのやる気を掻き立てるために絶対必要ですね。

これは勉強になりました。

後は、良く分からないです。

Questの画面見たからって、Questの画面には何が必要な要素なのかとか、どういう風に画面の配置をすべきだとかは全く分かりません。

UIのデザインは実際のUIをまとめたサイトを見たら勉強出来る。って言っている人がいたんですが、実際に勉強してみた感想は、あんまり得るものはなかったです。

やっぱり優れたUIの作成方法を勉強するには、普段からGameを沢山Playする人が、実際にUIを使用して、使いやすい使いにくいなどを肌で感じて、良いUIに必要なのは何かをまとめたTutorialが必要です。

そういうのを来週は探してみます。

11.Blenderの勉強

今週も復習だけやって終わりにします。

<Selection Method

やりました。

2022-02-14Blogの復習>

出来ました。

結構忘れています。やっぱり継続する必要があります。

2022-02-21Blogの復習>

何か今週のBarrelは一寸間違っているような。

先週やった時は以下に示した様なEdgeは出来なかったような気がします。

本来ならばこんな感じになるはずでは?

うーん。分からん。

出来ました。

FaceじゃなくてEdgeを選択するんでした。

2022-02-28Blogの復習>

今週の木です。

2022-04-03Blogの復習>

線を真っ直ぐにするのにS+Z+0なのに、R+Z+0をずっとやっていました。

真っ直ぐにならなくて焦りました。

2022-04-25Blogの復習>

全部やりました。

Blenderの復習は音楽でも聞きながらやると良いみたいです。あんまり頭を使うものではないのでRelaxしながらやるとストレスが貯まりません。

12.追加のTutorial

【UE4/UE5ゲーム制作講座】インスタンス編集可能ってちゃんとわかってる?【設計の話も】を見ててびっくりしたんですが、Actor のPrivateにCheckを入れると他のBlueprintからGet やSetノードを使ってAccessする事が出来ないって解説されていました。

いや。嘘でしょう。

だってPrivateにセットされた変数にAccessするために用意されたのがGetter やSetterな訳で、Getter やSetterでAccess出来なかったらどうやってPrivateの変数に他のClassからAccessするの?

Geeks For GeeksのEncapsulation in C++ [20]でも

Getter やSetterを使用してPrivateな変数であるXにAccessしています。

こんなObject Orient Programmingの基礎中の基礎に反する事があるわけない。と思い確認しました。

Third Person Characterを開いて

Test と言うBoolean型の変数を作り

PrivateにCheckしました。

Level BPを開いてThird Person CharacterのTest変数にAccess使用とすると

ない。

確かに出来ないです!

今度はPrivateのCheckを外してテストします。

今度は出来ました。

驚きです。

本当でした。

Actor内の変数をPrivateにしたら他のBPからその変数にAccessするためのGet ノードやSet ノードは使用出来なくなります。

それじゃ今度は、Third Person Character内にこのTest変数のGetterを作成してみます。

勿論、変数TestはPrivate、Get Test()関数はPublicにセットしてあります。

このGetterは普通に呼び出し出来ました。

今までずっとBP内で作成した変数は、BPがGetter やSetterを自動で作成してくれていると思っていました。

違ったんですね。勉強になりました。

C++では変数は普通はPrivateに書くんですが、UE4C++では確かPublicに書いていたような気がします。それも確認します。

公式のDocumentであるIntroduction to C++ Programming in UE4 [20]を見たら

やっぱりPublicに変数作成しています。

Unreal Engine 4 Scripting with C++ Cookbook でも

このRPGを作成するための使用したBuilding an RPG with Unreal 4.xでも

UE4C++で作成した変数は、確認出来た限り全部PublicかProtectedになっていますね。

うーん。

良く分かりませんが何か理由がありそうです。BPでも変数を作成するとDefaultではPrivateのCheckは外れていますね。

その理由とGetterやSetterのNodeがPrivateで使用出来なくなるのが何か関係ありそうな気がしなくもないです。

兎に角、BPで変数をPrivateにセットしたらGet やSetノードは使用出来ない事は分かりました。

13.まとめと感想

今週の勉強は以上です。

14.参照(Reference

[1] Epic Games. (n.d.). Unreal Engine | The most powerful real-time 3D creation tool. Unreal Engine. Retrieved May 22, 2022, from https://www.unrealengine.com/en-US/

[2] CGHOW. (2022, April 26). UE5 Niagara & Custom Stencil Buffer Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=pp5Z8_Tz0xU

[3] Epic Games [Unreal Engine]. (2020, August 19). How to Create Masks With the Custom Stencil Buffer | Tips & Tricks | Unreal Engine [Video]. YouTube. https://www.youtube.com/watch?v=PiQ_JLJKi0M

[4] Epic Games. (n.d.-a). Exponential Height Fog. Unreal Engine. Retrieved May 22, 2022, from https://docs.unrealengine.com/5.0/en-US/exponential-height-fog-in-unreal-engine/

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

[6] Cloward, B. [Ben Cloward]. (2022, February 10). Creating Cubemaps - Shader Graph Basics - Episode 33 [Video]. YouTube. https://www.youtube.com/watch?v=HA0xXiqxA54&list=PL78XDi0TS4lFHEvvUXpOoTzV-IdCs1hNk&index=1

[7] 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

[8] Cloward, B. [Ben Cloward]. (2022a, January 20). Triplanar Projection Normal Maps - Shader Graph Basics - Episode 30 [Video]. YouTube. https://www.youtube.com/watch?v=VUoI_IESK7U&list=PL78XDi0TS4lFD_8T8gkE29St8c__xIZV_&index=5

[9] Cloward, B. [Ben Cloward]. (2021, December 16). Direction Masks - Shader Graph Basics - Episode 27 [Video]. YouTube. https://www.youtube.com/watch?v=HKSIxFnsHuk&list=PL78XDi0TS4lFD_8T8gkE29St8c__xIZV_&index=2

[10] Klaus [klaus]. (2022, January 12). Gaea Beginner Tutorial Series : Part 1 - Interface [Video]. YouTube. https://www.youtube.com/watch?v=H-vTeYYHJPM&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=1

[11] GeeksforGeeks. (2021, October 27). Difference between RAM and Cache. Retrieved May 22, 2022, from https://www.geeksforgeeks.org/difference-between-ram-and-cache/#:%7E:text=CACHE-,1.,memory%20component%20in%20the%20computer.

[12] Aspland, M. [Matt Aspland]. (2020, December 18). Dynamic Footprint System Part 1/2 - Unreal Engine 4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=VJstjFMVbZw

[13] Aspland, M. [Matt Aspland]. (2020, December 19). Dynamic Footprint System Part 2/2 - Unreal Engine 4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=9HlZ-6aFk1I

[14] UnrealityBites. (2022, May 5). Unreal Engine 5 - Footprints In the Sand (Landscape Displacement) [Video]. YouTube. https://www.youtube.com/watch?v=GhtZK8J2LcM

[15] GDi4K. (2022, March 29). OpenLand Deform Toolkit for Unreal Engine HeightField Mesh Based Trails, Foot Paths, FX (UE5 Ready) [Video]. YouTube. https://www.youtube.com/watch?v=FW4twCpIL6w

[16] Interface In Game. (2020, December 11). Screenshots | Interface In Game | Video games UI. Retrieved May 22, 2022, from https://interfaceingame.com/screenshots/

[17] Marc W. (2015, December 13). Sand Footprints in Unreal Engine 4 [Video]. YouTube. https://www.youtube.com/watch?v=SiXxQkc0xMc

[18] CodeLikeMe. (2020, November 28). Landscape Deformation in Unreal Engine [Video]. YouTube. https://www.youtube.com/watch?v=tgEQY8rz6f4

[19] Kurie Meiku. (2022, May 20). 【UE4/UE5ゲーム制作講座】インスタンス編集可能ってちゃんとわかってる?【設計の話も】 [Video]. YouTube. https://www.youtube.com/watch?v=27V5xCQY_vw

[20] Epic Games. (n.d.-b). Introduction to C++ Programming in UE4. Unreal Engine Documentation. Retrieved May 22, 2022, from https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/IntroductionToCPP/