UE4の勉強記録

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

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

<前文>

アメリカではレストランでウエイターを呼ぶ時に手を挙げてはいけない?>

じゃあ、どうやって呼ぶんだよ。

と調べたらみんな手を上げてWaiterを呼んでいます。

何で日本では、こういう嘘が流行るんですかね。

それは誰も事実を確認しないからだと思います。

事実かどうかを調べるのは面倒なんです。だから誰か権威がある人が発言すると確認もしないで何となく正しい事になってしまうんです。

それでこれから書く話は、確認は個々でお願いしたんですが、私個人としてはかなり確証が高いと思っています。

それは2022-06-05のBlogで書いた

が起こり得る未来であると思われる事です。

それは日本ではあまり話題にならないけど世界では大きなNewsになったある話と関係があります。そのNewsとは今度のNATOの会議に日本から首相が参加するというNewsです。

これ、もの凄い大きなNewsなんです。

Europeではとてつもなく好意的に捉えられていると言うか、もう日本がNATO入りするのは確定済み位の勢いで解説されています。

よく考えたら日本がNATOに加盟したらRussiaを挟み撃ちに出来る訳で、それがRussiaの脅威にさらされているEuropeの人達にとって凄い勇気を与えています。

勿論、日本がNATOに加盟すると同盟国を攻撃された時には参戦しなければならない訳で、そんなに簡単には出来ないかもしれません。

しかしこのNewsはEurope中にかなりの大きな希望をもたらしています。

所が、Reddit読んでいたら、それに対して凄い反対しているアメリカ人(多分)がいるんです。

一体、何でと思ったらピンと来たんです。

もし、日本がNATOに加盟したら中国が台湾に攻め込む事態になった時に、アメリカ軍は日本を捨ててアメリカ本土に逃げる事が出来なくなるんです。だからいざ変事が起きた時に、日米安保を破棄する気だった連中(の一部)だったんです。

あー。と思いました。

その人は繰り返し「NATOに加盟するにはEuropeの国でないと駄目だから日本は加盟する資格がない。」と主張してみんなに水を差していました。

あんまりにもそう主張しているのでとうとう、ある人がこう答えました。

「それだったら地中海に浮かぶ島の一つでも日本にあげれば良い。これで日本はNATOに加盟する権利が生まれる。」

えー。ですよ。

もうそこまで日本はEuropeから好かれているんですよ。

これはこれからの日本はアメリカよりEuropeを見て生きていくべきです。

EU加盟すれば日本もEUの法律を守る必要が出て来る代わりに、EUのどの国で働く事も暮らす事も出来る様になります。これもほとんどの日本人には非常に楽しい話だと思います。

とても悲しいですが、最近のアメリカのNewsを聞いているともうアメリカは駄目だなと思います。

Capitol riotの聴聞会でトランプ元大統領が、選挙で負けた事を分かった上で民主党が投票を偽造したと主張し、この議会における暴動を扇動した事が事実としてほぼ判明しました。

これは元大統領が嘘をついて暴動を扇動したという、前代未聞の事態として多くのアメリカ人を驚かせましたが、はっきり言います。彼のFollowerで暴動を起こした人とそれを支持する人達は一人もトランプ元大統領に騙されていませんよ。みんな彼が嘘ついているのを承知で暴れていたり、暴れている人を支持していたんです。

長年、アメリカに住んでいたので、アメリカ人が嘘つく時って分かるんです。なんというか顎が引きつるんです。

それで、あ、こいつら嘘ついているなと分かるんです。

私ですら分かるんですから、他のアメリカ人が分からない訳ないです。全員、分かってやっています。

これじゃ、アメリカの崩壊は止まらないでしょう。早く見切りを付けないと日本も巻き込まれて終ってしまうかもしれません。

あ。

それで言うのを忘れていましたけど、だからと言ってアメリカと比べて日本がマシとは言っていませんから。日本がアメリカより先に崩壊する可能性だってかなり高いです。

ただそれを日本で言うと凄い怒る人がいるので、ここでは書かないだけです。

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

<本文>

1.今週の勉強

今週も以下の内容をやって行きます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGStoryの改善
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • UI Designの勉強
  • Blenderの勉強
  • Anime Renderingの勉強

今週からAnime Renderingの勉強を追加しました。

2.Niagara: CGHOW氏のTutorialをやる

今週もUnreal Engine 5 Niagara Beginner Tutorial - UE5 Niagara Starter Course! [1]の続きを勉強していきます。

2.1 Unreal Engine 5 Niagara Beginner Tutorial - UE5 Niagara Starter Course! [1]の続きを勉強する

<User Parameter

あれ?

先週勉強したInstance Parameter in Systemの内容がここに。

Instance Parameter in Systemの内容を見直したら違っていました。先週、Instance Parameter in System内で作成したのはSystem Parameterで、ここで作成するのはUser Parameter(つまり、NS以外からアクセス出来るParameter)でした。

まず、先週作成したSystem Parameterを消します。

当然、Spawn Rateの設定も元に戻します。

今度はRead from new User Parameterを選びます。

System のUser Parametersを開くと

先程、作成したUser ParameterであるSpawn Rateがありました。

試しにSpawn Rateに100をセットします。

普通にParticleを生成しました。

もう一個のEmitterのSpawn Rateにも同じUser Parameterをセットしました。

結果です。

先週やったSystem Parameterとの違いは、このNSのInstanceをLevel上に配置した時、

配置したInstanceのParameterをDetail画面から操作出来る事です。

はい。

私はUser Parameterは知っていたんですが、System Parameterがあるのは知らなかったのでこの2つを区別していませんでした。

勉強になりました。

<Local Space

EmitterのPropertiesを選択すると

Local Spaceというのがあります。

これについてです。

おお。

これが知りたかった。

一応私が今の時点で分かっているのは、

<<NSがLevel上で移動しながらParticleを生成した場合>>

  • Local Spaceにチェックが無い場合は、それぞれのParticleは生成した場所を基準にその後の挙動を決定します。
  • それに対してLocal SpaceCheckがある場合は、それぞれのParticleNSの位置を基準にしてその後の挙動を決定します。

これだけです。

Tutorialを見たら同じ事を説明していました。

ほかの説明は無かったです。

その代りLocal Spaceの下にあるParameter、Determinismについての解説がありました。

このParameterの機能はRandom値を採用した時のSeedの値を同じにするかどうかのようです。

GPU

Determinismの下にあるParameter、Sim Targetについての解説です。

GPUを選択する時は、Fixed BoundsにCheckを入れる必要があります。

このBoundsに関してですが、はるか昔にParticle SystemはCostが掛かるので、Playerの視野に入った時だけ生成するようにしている。その視野に入ったかどうかの判定をするのがBoundsで、GPUにはそのBoundの範囲を自動で知る機能がないので指定する必要がある。みたいな話を勉強した記憶があります。

その辺の話はこのTutorialには無かったです。

GPUを使用すると沢山のParticleを使用出来ますが、制約もその分増えるそうです。例えばLight RendererはGPUからは使用出来ないそうです。

うーん。

これは面白い事を聞きました。Lumenを使用した場合のParticleの挙動として単にEmissive Colorの値を上げた場合とLight Rendererを使用した場合の違いが無くなるんじゃないの。と思っているんですが、Particle にGPUを使用した場合のLumenの挙動がどうなるのかにも興味が出て来ました。

もしこれでGPUを使用したEmissive Colorの値を上げたMaterialを使用したParticle がLumenによってGlobal Illuminationを実行出来たら、Light Rendererの価値って無くなるんじゃないでしょうか?

<Emitter Summary

Emitterのまとめと書かれていますが、実際はEmitterを作成した後で、Moduleの機能を知らない人でも微調整を行えるようにするための設定方法についての解説でした。

例えばSpawn RateのParameterがこのEmitterの調整で凄い大切だとします。

その場合は、Spawn Rateを右ClickしてShow in Emitter Summeryを選択します。

するとEmitter Summaryの中に

Spawn RateのParameterが追加されます。

これの何が特かと言うと、以下の様にEmitterを短くした時でも

Emitter SummaryからSpawn Rateの値を管理出来るからです。

うーん。

これは初めて知りました。

しかもこの機能をEmitter Summaryと呼ぶんでした。最初Emitter Summaryと言っていたのでEmitterの機能のおさらいをここでするのかと思っていました。

<Life Cycle(Loop Type)>

Emitter Update SectionにあるEmitter State Moduleの

Life Cycleについてです。

Life Cycle ModeにはSystemとSelfがあります。

Selfを選択した場合はそれぞれのEmitterでLife Cycleを指定する必要があります。

Systemを選択した場合は以下のようにSystemのSystem Stateから

全てのEmitter のLife Cycleを統一して指定する事が出来ます。

次にLife Cycleの中で最も重要なParameterであるLoop BehaviorとLoop Durationについて解説します。

Loop BehaviorをOnceにします。

するとEmitterが働くのは一回だけになります。

そしてLoop Durationの時間だけ働きます。

例えばLoop Durationが2秒にセットされていると2秒間働きます。それで終です。

後、TimelineにセットされているEmitterの緑のバーの部分の長さが2秒になります。

Loop Durationを1秒にした場合、

緑のバーの長さも一秒になります。

TutorialではLoop BehaviorがMultipleの場合も解説していましたが、このLoop Durationを何回繰り返すのかを指定出来るだけです。

<LODs(Scalability)>

今度は、Scalability Modeについてです。

これも初めて触るParameterです。

ここでしっかり勉強しておきます。

これSystemにセットした場合、

System State上には何のParameterも表示されません。

Selfにすると以下の3つの項目が現れます。

MaxDistanceを300に変えて

Previewの距離を色々変化させました。

Particleが消えました。

Tutorialでは沢山、NSを並べて遠くのNSがParticleを生成していないのを確認していました。

そう言えば、Cameraの位置を動かさずにLevel上を移動出来るCommandがあったはずです。

それを使用してもう少し詳しく観察してみましょう。

そのCommandは、ToggleDebugCameraでした。

Tutorialと同じようなLevelを作成して試してみます。

NSに近づきます。

近づくと沢山のNSがParticleを生成するようになりました。

これをToggleDebugCameraを使用してNSに近づいてみます。

結果です。

見事にNSがParticleを生成し始めました。

あれ?

どうやらこのCommandはカメラだけPlayerの操作するCharacterから離れて動かせるCommandみたいです。

勘違いして覚えていました。

Max Distance Responseでは以下の選択が出来ます。

Cursor合わせると以下の非常に詳しい解説が表示されました。

でもこれって読んでみるとそれなりに当たり前の事しか解説していませんね。

例えば、ActiveとInactiveと書かれていますがそれが具体的に何を指しているのかは分かりません。

それでも情報が全くないよりは全然マシです。しっかり読んだらそれなりの理解は出来そうです。

<Spawn Modules

Spawn Moduleについてです。

Spawn Moduleには以下のモノがあります。

Spawn Burst Instantaneous Moduleについてです。

このModuleのSpawn Countに100をセットすると

一辺に100のParticleを生成します。

Spawn Timeです。Spawnする時間を遅らせる事が出来ます。

試しに2.0秒遅らせてみます。

あれ2秒になっても何も生成しません。

何で?

Emitter Update SectionのEmitter State Moduleの

Loop Durationが1.0秒にセットされているからでした。

これは人の寿命に例えると分かり易いです。

20歳になったら手紙を送ってと約束してもその人が10歳で死んでしまったら手紙は永遠に送られてきません。

Loop Durationを5秒にして2秒になった時にParticleをBurstしてもらいます。

2秒を過ぎると

Particleが生成されました。

成程。

このTutorialの解説、とても分かり易いです。

Emitter Update SectionのEmitter State ModuleのLoop DurationがそのEmitterの寿命である事もよく分かりました。

更に、以下に示したTimelineのSpawn Burst Instantaneous – Spawn Countの〇を押すと

以下に示した茶色の矢印のLineがある所に白いDiamondのMarkを作成します。

これはここでParticleをSpawnしろと言う指令で、

EmitterのEmitter Update Sectionに

Spawn Burst Instantaneous Moduleが一個追加されます。

勿論、このModuleのSpawn Timeには先程のTimelineの時間が指定されています。

Spawn Burst Instantaneous Module のSpawn Probabilityについての解説です。

1.0だと100%、0だと0%の割合で生成します。

次にSpawn Particle from Other Emitter Moduleについての解説をします。

え。Eventとかここでやるの?

と思ったらTutorialでもこれはAdvanceだから後で教えます。と言ってSkipしました。

ああびっくりした。

Spawn Per FrameとSpawn Per Unitについてです。

この二つは使用した事ないです。

Tutorialの解説によるとこの2つの機能は全く同じでFrameはFrame毎に、Unitは距離毎で働く事だけが違うそうです。

Frame毎は意味が分かりますがUnitの距離毎とはどういう意味なんでしょうか?

Tutorialはそれも解説してくれていて、

NSが動いた距離の事だそうです。

例えばSpawn Per Unit ModuleのSpawn Spacingが以下の様な設定だとすると

以下の様にNSを20cm動かした時だけParticleをSpawnするようになります。

これがSpawn Per Unit Moduleの機能だそうです。

今度はSpawn Per Frame Moduleについての解説です。

ここは以下の4つのAttributeがあって

勉強する箇所が沢山あります。

気合い入れてやって行きます。

まずはPoint AttributesのLifetime ModeとLife timeです。

これ、前から疑問だったんですがParticleのLife timeが5秒とかで、Emitter Update SectionのEmitter State Moduleの

Loop Durationが1秒の時とかはどうなるんでしょうか?

試してみます。

Emitter Update SectionのEmitter State Moduleの設定を以下の様に変えます。

これでEmitterは一回だけ生成され、その寿命は1秒になります。

更にEmitter Update SectionにSpawn Burst Instantaneous Moduleをセットします。

これでParticleは一回だけ生成されるようになりました。

更に、Initialize Particle Moduleの

Life timeを5秒にセットします。

これでParticleの寿命は5秒になりました。

これでテストします。

結果です。

一秒を過ぎてもParticleは存在し続けていました。

これはEmitterが死んでもParticleはそのParticleの寿命が尽きない限り消えないと言う事のようです。

Tutorialでは更にLifetime ModeのRandomの解説がされていました。

Randomを選択した場合

MinとMaxの値のどっちかが選択されるんじゃなくてこの間のどれかの値が選択されます。とかかなり初心者向けの解説がされていました。

こういう解説って自分が理解した途端、こんな簡単な事はどうでも良いでしょう?とか言い出す人は多いですが、後から勉強する人を考えるとしっかり説明する習慣をつけておくべきなんでしょうね。

次にPreviewのBackgroundを変える方法についての説明がありました。

Backgroundが以下の様になっているPreviewのBackground Imageを灰色に変えてみます。

まずWindowをClickしてPreview Scene Settingsを開きます。

すると以下のBoxが表示されます。のでこの中のShow EnvironmentのCheckを外します。

するとEnvironment Colorという表示が現れますのでここでBackground Colorの指定を行います。

結果です。

BGIが灰色になりました。

流石に全部記録するのはきつくなってきました。

自分が知らない事だけ記録する事にします。

Color ModeにRandom Hue/Saturation/Valueがあります。

これを選択するとHue、Saturation、Valueの値をRandomにセット出来る様になります。

次はPosition Modeです。

Particleを生成する位置は次のShape Location Moduleでも出来ますが、ここでも設定出来ます。

次にSprite Attributeについての解説に移ります。

Sprite Size ModeのNon-UniformのSprite Sizeを以下の様にセットすると

以下の様な形状に変化させる事も出来ます。

こういう小技は知っておくと便利ですね。

Sprite Rotation ModeをUnsetにすると

以下の様にParticleが同じ向きになります。

Sprite UV Modeについてです。

これはここで初めて使用方法を勉強しました。

結構面白い機能です。

この機能を知るためには特別なMaterialを作成しそれをSpriteに使用します。

作成した特別なMaterialです。

因みに実装方法です。

これをRender SectionのSprite Renderer Moduleの

Materialにセットします。

後、微調整を一寸すると以下のようになります。

これでSprite UV Modeの機能について説明する準備が出来ました。

Sprite UV ModeにRandom Xをセットします。

すると生成されるSpriteの絵柄が左右逆になっているのが有るようになります。

はい。

Sprite UV ModeはSpriteにはるMaterialのImageの向きを変化させるんです。

左右上下対照なSpriteの場合、この機能は関係ないですが、上下左右のあるImageをSpriteに使用した場合に大きく役に立つはずです。

はい。

ここで問題です。

なんでこのSpriteは黒い部分が透明じゃないんでしょうか?

Initialize Particle ModuleのColorのAlphaの値に0を入れても

透明になりません。

それはMaterialでParticle Colorノードを使用してないからです。

以下の様にParticle Colorノードを使用すると

Initialize Particle ModuleのColorでセットした値が

反映されるようになります。

では、先程のImageをParticle Colorノードで指定するにはどうしたら良いでしょうか?

はい。

こうします。

結果です。

見事に黒い部分だけ消す事が出来ました。

今週はここまでです。

見事に今週もまた20分しか進まなかったです。

3.Materialの勉強

今週もBen Cloward先生のTutorialを勉強します。今週はTexture Tiling Without Repetition - Shader Graph Basics - Episode 47 [3]を勉強します。

後、今週からPPLineDrawingの検証はAnime Renderingの項で勉強する事にします。

3.1 Texture Tiling Without Repetition - Shader Graph Basics - Episode 47 [3]を軽く見る

このTutorial、44分もあります。

とりあえずUEの方から見て行きます。

まず先週作成したHexGrid に改良を加えます。

以下の3つのOutputを追加しました。

以下の様になりました。

このMaterial Functionを使用して以下のMaterialを作成しました。

あんまり理論の解説は無かったです。

もしかしたら理論はUnityの実装で説明したのかもしれません。

そっちを見てみます。

見ました。

確かに一寸だけは解説していましたが全体の理論はあんまりよく分からなかったです。今回のHex Gridを用いたTilingの消す方法は使用出来たらそれで良いです。理論を完璧に理解するのは無理な気がします。

ので実装します。

3.2 Texture Tiling Without Repetition - Shader Graph Basics - Episode 47 [3]を実装する

先週作成したHex Gridに以下の実装を追加しました。

この実装の理論を、実装方法を見ただけで理解出来る人はいないでしょう。私には無理です。

と思ったらTutorialで何をしたかったのかについては説明しています。

以下の3つのEdgeを見るとそれぞれ少しだけずれています。

このずれた部分が重なる訳です。それでBlendした時に境界が目立たなくなる。

そう言う事でした。

改良したHex Gridノードと先々週に作成したUV Random Transformを使用して以下の実装を作成します。

Hex Gridノードの実装でConstant ノードを使用していた箇所をFunction Inputノードに変更して、Hex Gridノードの実装を以下の様にしました。

以下の様に実装を変えました。

これで完成です。

今回はこの中の実装はBlack Boxで良いです。

それよりもこの方法でTextureのTilingがどれだけ消せるのかが重要です。

3.3 結果の検証

このやり方でどれだけのTilingが消せるのか検証します。

まず結果を示します。

確かにTilingは全く見えません。

Texture同士の継ぎ目はどうでしょうか?

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

石が重なっていますね。

これかなり近づいて初めて気が付きました。が実際に運用した時にどのくらい目立つかは分かりません。もしかするとこういう石が並んでいるタイプのTextureにはこのやり方は向かないのかもしれません。

TutorialでやっているようにTexCoord[0]に36を掛けてみました。

確かにTilingは見られません。

以下の設定にしてつなぎ目を重点的に見てみました。

石が重なっている部分を見てみます。

こんな石、現実でもありそうです。

これはどうでしょうか?

一寸苦しいかもしれません。

凄い変ですけど、現実にもありそうで一概に駄目とは言えないですね。

今度はGrid Focusの値を小さくして繋ぎ目をぼやかしてみました。

こっちもアリと言えばアリかもしれませんね。

汚れてつなぎ目が良く見えないと解釈する事も出来ます。

因みにSmile君をTextureに指定した場合、以下の様になりました。

ある程度のTexture同士の重なりが確認出来ます。この重なり感が許容できるTypeのTextureならこの方法は凄い役に立つ気がします。

3.4 Texture Tiling Without Repetition - Shader Graph Basics - Episode 47 [3]のコメント欄を読む

 一応、Hex GridとUV Random Transformを使用した繰り返しのないTextureの作成方法は理解しました。更にこの方法による長所と短所も理解しました。

長所はTextureのサイズを大きくする必要がないのでCameraからの距離が近い箇所のLandscapeのTilingを隠すのに使用出来る事です。

短所は、コストがかかる事、境界部分が多くなるのでつなぎ目が目立つタイプのTextureには使用出来ない事です。

所で、このTutorialのComment欄で言っている意味が分からないのがあります。

その辺を検証したいと思います。

これはあれです。

レンガのようなTilingがある事を見越したTextureに対してはそもそもこのやり方を適応する事は考えていないと言う事でしょう。

レンガだったら繰り返しが見られるのは当然で、そもそもTilingが不自然に見える事がないので最初の前提としてレンガの例を持ち出してくるのがオカシイです。

これ。このCommentの意味が分からん。

そもそもUnityの話をしているので話の意味が分からないのは当然なんですが、UnityのMaterialにはTerrainと言うのがあってそれを選択するとTileの繰り返しが無いLayerを選択出来ると言っているのでしょうか?

そんなの本当にあるんでしょうか?

Unreal EngineのMaterialだったLayerはあります。それでもTilingは起こります。ので一寸素直には信じられない話ですが、確認しようがないので一応、Take noteしておきます。

次のCommentです。

Normal Mapの回転には更なる工夫が必要なのはTri Planar Projectionを勉強した時の経験で理解出来ます。

もう一つのTransition Between Tilesの場所でHeight Mapもしくは単なるNoiseのサンプルを取る方法を採用したらもっと有機的なTransitionになるんじゃないでしょうか?と聞いている箇所です。

これに対してBen Cloward先生も素晴らしいIdeaです。と答えています。

しかしこのやり方の意味が分かりません。

Transition Between TilesってHex Gridの繋ぎ目の部分を言っているんでしょうか?この辺が理解出来たら何言っているのか少しは分かりそうです。

次のCommentです。

このCommentも他のCommentに負けず劣らず意味不明です。

まず、MF_CellBombingというMaterial Functionがこれを同じ機能を持っていると言っています。その言っている事が正しかどうかは別にしてその事自体は理解出来ます。

その後のこのCommentに対する返答です。これが意味不明です。

まずRVTってRuntime Virtual Textureの事でしょう。このTutorialとは全く関係ない話です。

そしてCellBombingについて色々書いていますが、CellBombingって検索してもこのサイトしか出てこないんです。本当に存在する技術なんでしょうか?

多分ですが、MF_CellBombingとこのTutorialでやっている事は、全く違うよ。CellBombingではRVTを使用しているよ。Unreal Sensei氏がCellBombingを使用してLandscapeを作成しているよ。

と言っているのと思われます。

しかしそれだと会話が噛み合っていません。

MF_CellBombingというMaterial FunctionがこのTutorialで作成したMaterialと同じ機能を持っていると言っている人に対して、MF_CellBombingはRVTを使用しているので全然違う技術だよ。と答えるなら理解出来ます。会話が噛み合っていますよね。

何で突然、RVTの話を始めるんですかこの人は?

一寸、理解してない人が背伸びして分かった振りしているだけなのかな。とも思ったんですが、回答の文だけ抜き出して読むとそれ自体は意味をなしていて理解していない人という印象は受けません。

???です。

次のCommentです。

Stochastic Methodについて聞いています。これ以外にもStochastic Methodについて聞いている人がいましたが、Stochastic Methodってどんなやり方なんでしょうか?

こんな感じでComment欄には意味不明な個所が沢山あって???です。

4.RPGStoryの改善

4.1 今までの経過のまとめ

もう今回でPart 10 まで来ています。のにまだ全然終わる気配がないです。

この10週の間に私が考えた事を以下にまとめます。

  • 話の展開
  • 登場人物
  • 場所や人物の名前
  • Storyの辻褄合わせ

<話の展開>

まず粗筋を考えました。

Playerが操作するキャラが金の切符を手に入れるために異世界に転生する所から、金の切符を手に入れる所までです。

この粗筋自体はかなり良い物が完成しています。

後から読み直したら、あれこんな良い話だったっけ。と自分で書いておきながら、感動してしまいました。

主人公だけが行ける別世界が1000年前と1000年後の世界だったり、人類が1000年後には消滅している事が判明したりする所は結構、ドキドキしながら読めました。

更に1000年後の世界を救うために今の世界でかんばるも結局、救世主を殺されてしまう話も非常に上手く書けていました。

最後のどんでん返しも面白かったです。

やっぱり読書が趣味だっただけあって結構才能と経験だけで力押しでそれなりの粗筋になりました。

<登場人物>

登場人物の数が少ないのと魅力的なキャラが少ないので以下の設定を追加しました。

  • 人類を滅ぼそうとする悪魔軍団に選ばれた7つの大罪。
  • 神から人類を正しい方向に導くために選ばれた12使徒
  • それらに翻弄される王族の人々。

この設定を追加しただけでぐっと話に深みが加わりました。

7つの大罪の一人である毒蛇が、姫を誘拐して王様を脅し「金の切符」のありかを聞くシーンのような映画のように上手く出来ました。

ここではっきりしたのはどうやったら魅力的なキャラを作れるかです。

それは、誰から見てもはっきり分かる目的を持たせる事です。目的がはっきりしている人間って評価しやすいんです。だから魅力的かどうかもはっきりしやすいんです。

<名前>

意外に重要だったのが名前を考える事です。王様とかあの世界とかで何かを指すのは限界があります。名前を付けるのは凄い重要でした。

  • 村の名前には淡水魚の名前。
  • 国の名前には神々の名前
  • 12使徒の名前にはそのまま12使徒の名前。
  • 重要な何かには色の名前を追加する。
  • 7つの大罪には、蠱毒の材料に使われる虫や小動物。
  • 王族には宝石の名前

のように元になる何かを使って考えました。

<Storyの辻褄を合わせる>

先週、特に書きましたがStoryの辻褄があっていません。12使徒7つの大罪の存在は、森と泉の青い世界で、アポロン王国の王様に会って初めて知る事実なのに、Playerが一番最初に行く村の住人が12使徒について語っていたりしています。

どうやって物語の辻褄を合わせるのか、方法が分かりません。

<まとめ>

映画や小説で物語を考える人はどうやって考えているんでしょう。

どう考えても適当にやって出来るとは思えません。何かしらのマニュアルがあるはずです。そのマニュアルを見つけて、それに沿って考えた方が速く完成する気がします。

検索したら速攻で出て来ました。

How to Write a Novel in 10 Steps: Complete Writing Guide [2]です。

大体まとめるとこんな感じです。

  1. 自分が長時間遊んでいたい世界を作る
  2. その世界観でStoryを作る
  3. キャラを作る
  4. 一人称か三人称か決める。三人称の時は、物語を語る人は全てを知った上で語っているのかどうかを決める
  5. 話の大筋を決める
  6. 終を決める
  7. 最初のDraftを書いてみる
  8. 書き終わったら少し休んでから推敲する
  9. 2回目のDraftを書いてみる

そんなに大した事書いてなかった。

まず実績か何も書いていない。

このManualに沿って書いた人の小説がどれくらい売れたのかとか、物語の面白さとか登場人物の魅力はとか、更に物語の整合性の取り方などの知りたい点について全く書かれていなかった。

実際そんな実績ないんでしょう。と言うのが途中まで読んでいて感じられました。

俺が知りたいのは、小説を書き上げた事ない人でも最後まで書けるマニュアルじゃなくて、金払っても読みたい物語を書くためのManualなんです。

これじゃこの前ネットで見た、繁盛するラーメン屋の作り方マニュアルの方が役に立つレベルですよ。

確かそのマニュアルだと

  • 客層は2040代の男性である事を忘れるな
  • 動線?上に店を配置しろ
  • マズローの欲求5段階説の内、上から3番目と4番目の欲求を満たせるラーメンを作れ
  • 流行にのるな。潮流にのれ

みたいな事が書かれていました。

こっちを深堀します。

4.2 繁盛するラーメン屋の作り方マニュアルを参考にして小説のマニュアルを考える

まずはこのマニュアルが何を言っているのかを考察します。

<客層は2040代の男性である事を忘れるな>

これはそのものズバリで、ターゲットが誰であるのか決めるべきって事でしょう。

ニンニクがたっぷり入った山盛りのラーメンを女の子や老人が食いたいかと考えれば、食いたくないに決まっています。

想定する客層を最初に決めるのは当然なのでしょう。

動線?上に店を配置しろ>

動線って何の事?

と思ったら、人の移動する経路を地図上に書いた線の事でした。

通勤上に配置されていない店にサラリーマンが寄る可能性はほぼ0だそうです。

有名ラーメン店は動線上に無くても繁盛しているじゃん。と思ったらそれは既に有名だからで、有名になるためには絶対に動線上に店を出す必要があるそうです。

マズローの欲求5段階説の内、下から2番目と3番目の欲求を満たせるラーメンを作れ>

マズローの欲求の内、一番下の欲求を満たすのはカップラーメンだそうです。それよりは高級なものを作る必要があるそうです。

しかし決してマズローの欲求5段階説の一番上の欲求である自己実現欲求を満たすラーメンを作ってはいけない。それを求めている客は非常に少ないから金にならない。とありました。

これって要するに化学調味料や砂糖なんかを全く使用しないラーメンの事でしょう。そんなラーメンを求める層って、文句は凄い言って金は落としそうにないです。

更にミシュランで星を取ったラーメン屋でも結構倒産しているみたいな話がありました。

更に若者が有名ラーメン店に並んでも食べに行くのは、下から三番目の欲求、社会から一員として認められたい欲求を満たすためだそうです。

<流行にのるな。潮流にのれ>

流行と言うのは、一年で廃れるモノだそうです。潮流とは10年単位で流行るものだそうです。

確かに一年で廃れるモノを作っても作っている内に廃れてしまいます。

例としてタピオカ屋が出ていました。

これは一寸、盲目的には納得出来ない話ではあります。タピオカは台湾や東南アジアでは完全に根付いています。アメリカでも結構見ました。単純な流行で切り捨てられるものじゃない気はします。

しかし言っている事は分かります。10年単位で流行るものを追えって事です。

<結論>

これを元にして小説書いた方が売れるんじゃねえ。と思いました。

のでこのマニュアルを元に小説を考えてみます。

<客層は2040代の男性である事を忘れるな>

これって要するに、夢枕獏みたいな小説を書けって事でしょう。

更に言えば若くてエロイ女性を出せって事でしょう。

ここに女性を道具として観てる。みたいな批判はいらない訳です。これってかなり大事な視点です。

まあ、小説の場合は、女性もかなり読んでいるのでラーメンのように単純に20~40代の男性だけを対象にする訳にはいかないのかもしれませんが。

小説ではないですが、FF15はこの視点が全く無かったんだと思います。だからメインの客層である20~40代の男性からあんなに叩かれたんです。

しかし長年、アメリカに住んでいた私は、日本に住んでいたのでは見る事の出来ない生の人間の欲求を沢山見たので、20~40代の男性の本当の欲求は若くてエロイ女性じゃない事を知っています。

20~40代の男性の本当の欲求は戦う事なんです。戦う事。

女の本質が子供を産むのと同じくらい男の本質は戦う事なんです。

やっぱり夢枕獏先生の様なヒット作を書く小説家もそれは分かっていて彼の小説に出てくる男は戦ってばかりいます。

動線?上に店を配置しろ>

ネットにだって動線ってあると思いました。

私は、まずPCをつけるとReddit開いてYouTube開いて一通り目を通します。つまりこの二つが私の動線なんです。この動線上にない物は私の目に留まる事はない訳です。

小説は良く分かりませんが、漫画だったら少年ジャンプが最も大きな動線になるんでしょうね。

ここに連載されれば世界中の人から見られる訳ですから。

そう言えば、けものフレンズの監督だった人に2作目はあんまりヒットしませんでしたね。

これはカドカワという動線から外されたから、ほとんどの人の目に触れられなかったんでしょうね。逆に初音ミクニコニコ動画と5ch(2ch)という大動線上に配置されていたので大ヒットしたんですね。

このネットにおける動線で、あんまり注目されていないけどかなり太いのが天気予報だと思っています。

アメリカに住んでいた時は、雨が降っても傘さす必要が無かったから天気予報なんて気にした事無かったです。日本に帰って来てそれやったらずぶ濡れになりました。それ以来天気予報だけは必ずCheckするようになりました。

天気予報サイトに広告打ったら凄い効果ありそうです。

マズローの欲求5段階説の内、下から2番目と3番目の欲求を満たせるラーメンを作れ

食品であるラーメンと違い、小説がマズローの欲求5段階説の一番下の欲求を満たせる事は出来ないので、その次の下から2番目の欲求を満たす事から始まります。

これって5ch(2ch)に書かれているような内容の事ですよね。

ああ。それで5ch(2ch)とかはあんなに流行っているのか。

ここは最初の「客層は20~40代の男性である事を忘れるな」と被る部分がありますね。

<流行にのるな。潮流にのれ>

これって今だとスマホで見やすいPlatformとかになるんでしょうか?まあ、10年単位で流行るものに乗れって事でしょうね。

小説だと何なんでしょうか?

SFとかのジャンルになるんでしょうか?それともスマホで読める小説がそれに当たるんでしょうか?

具体的なImageが一番湧かない所ですね。

<結論>

儲かるラーメン屋のマニュアルは売れそうな小説を書くためのマニュアルとして使えそうです。

惜しむのはこのラーメン屋のマニュアル、もっと沢山の項目が書かれていたんですが、良く読まなかったです。今になってもう一回探してみたんですが、見つかりません!

でもこうやってぶらぶらしながら検討した方が良い話が作れる可能性がありますね。

4.3  今までのBlogの読み直し

これはもう時間が無くなってしまったので来週やります。

5.Open Worldの検証

今週はこれを検討します。

関係ないですが、この3週間位、Screenshotで画面の切り抜きを作成する際、Mouseが勝手にDouble Clickする現象がたまに起きて、非常にイラつかされていました。

MouseのDriverを再Installしても直らないし、へんなVirus にでも感染してしまったのかとも思いました。

そしたらあるサイトで、Mouseが静電気を帯電しているとSingle ClickがDouble Clickになると書いてありました。

そのサイトによるとMouseの帯電をReleaseするためにはMouseのUSBを外して10回位Clickしまくると良いとも書かれていました。

ので試してみると、

何と直りました。

Screenshotで画面の切り抜きを作成する際、Mouseが勝手にDouble Clickする現象が全く起きなくなりました。

もっと早く知りたかった。

5.1 Runtime Virtual Texture Sample Parameter ノードが別々の値を得る事が出来るのかテストする

先週、思いついたIdeaはあくまでもRuntime Virtual Texture Sample Parameter ノードを2つ用意して一個はWorld Positionの値、もう一個はTexCoord[0]の値を返す事が出来る前提で考えています。

これをテストして確認します。

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

もし両方のRuntime Virtual Texture Sample Parameter ノードが別々の値をパスする事が出来るのなら、

MixVRTの値が0の時はWorld PositionのLandscapeが朽木にパスされ、MixVRTの値が1の時はTexCoord[0]のLandscapeの値がパスされるはずです。

テストします。

MixVRTの値が0の時です。

歪みまくっています。

MixVRTの値を1にします。

あれ?

Texture自体は変わっていますが歪みがそのままです。

あ、

そういうことか。

Normal Mapの値を変える必要があるのか。

Normal の値も追加しました。

結果です。

MixVRTの値が0の時です。

歪んでいます。

MixVRTの値が1の時です。

歪んでないです。

でも朽木はのっぺりしてしまっています。

じゃあNormal Mapは朽木のを使用したらどうでしょうか?

結果です。

うーん。

凄く良いんじゃないでしょうか?

5.2 World PositionノードをMaskしてRuntime Virtual Texture Sample Parameter ノードのUVsにパスしたらどうなる?

これ突然思いついたんですが一寸試してみたいです。

こう言うのです。

結果です。

全然駄目ですね。

やっぱりUVsに値をパスした場合、LandscapeのMaterialと同じ場所のTextureを得る事は出来ないですね。

5.3 朽木のNormal Mapを使用した場合を検討する

はい。

元に戻って5.1の検証の続きをやります。

要は朽木のNormal Mapを使用すれば歪みはなくなる訳です。

だったら最初のRuntime Virtual Texture Sample Parameter ノードのNormal Mapにも朽木のNormal Mapを使用したらどうでしょうか?

結果です。

うーん。

微妙に歪みが見えますね。

でも大体、どんな症状なのか理解出来ました。

5.4 今までの内容から対策を考える

今までの検討を整理します。

まずどんな問題を解決したいのかについてです。

RVTを使用してLandscapeのMaterialをLevel上に配置しているStatic MeshのMaterialにパスして使用すると以下の様に歪みが生じます。

Unreal Sensei氏はそのTutorialであるHow to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [4] でこの問題の解決方法として歪んでいる箇所はLandscapeのMaterialを適用しないと言う解決策を示しています。

これは、ある特定のLandscapeの場合(例えば雪が積もったLandscape)はかなり正しい解決策なのですが、上記のような砂が積もった場合はあまり正しくない気がします。

実際は以下に示した様にStatic Meshの汚れはStatic Meshの垂直方向にLandscapeのMaterialと混じる感じで発生しているからです。

それで歪んでいる部分に別のTextureを貼ったらどうかと思いました。

その別なTextureは、

から持ってきます。

ただしNormal MapはStatic Meshのを使用します。

すると

こんな感じのTextureを歪んだ部分に貼る事が出来ます。

5.5 歪んでいる部分の抽出方法を検討する

当然、歪んている部分だけ抽出する必要があります。

これはUnreal Sensei氏が歪んでいる部分をはじくために作成した以下の実装を使用すれば良いだけです。

以下の白い部分に適応されます。

5.6 実際に作成してみる

上記の理論で一回実装してみます。

LandscapeのMaterialを2つ作成します。

一つはWorld Positionノードの値をパスしたもので、Landscapeと全く同じMaterialを描きます。

もう一つはTexCoord[0]をパスしたもので、Landscapeの模様とは全く繋がっていませんが歪みはありません。

Blend Material Attributeノードでこの二つを混ぜます。

勿論、Alphaには前節「5.5 歪んでいる部分の抽出方法を検討する」の実装を使用します。

結果です。

うん。かなり良い感じです。

この辺に歪みが見られるのでSide Contractの値を調節します。

以下の様になりました。

Textureのサイズがあってない気がしますが、それ以外はかなり良いと思います。

今度は、Virtual Blend Heightの値を下げてみます。

あれ、朽木にTextureが貼られていない部分があります。

???

調べたら朽木に使用されているTextureが間違っていました。

直しました。

もう一回試します。

結果です。

朽木が砂に埋もれている感じは出てますね。

もっと近づいてみます。

Dirtによって朽木が汚れている感じは出ている気がします。

良く分からないので、Unreal Sensei氏のHow to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [4] の状態に戻してみます。

これは分かり易いです。私の追加した実装がある方がDirtの汚れがはっきり分かります。

以下の赤丸で囲った部分がFlatな感じがします。

この部分は微調整する必要がありますね。

でも一応、やりたい事は実現出来たのでここでVirtual Textureの勉強は一端終わりにします。

6.Gaeaの勉強

今週はKlaus氏のTutorialのGaea Beginner Tutorial Series : Part 5 - Build And Export [5]を勉強します。

今週はBuildとExportを勉強しています。

6.1 Gaea Beginner Tutorial Series : Part 5 - Build And Export [5]を軽く見る

まず一回全部見ました。

Build mapでなんであんなに沢山のNodeからBuild しなければならないのかが分かりません。

サイズに関してFree Versionは1024までしかExport出来ないみたいな話がありました。UEではDefaultでは1Pixel=1mなので、1024m、つまり最大で1kmのLandscapeまでしか作成出来ないのか。4km^2のOpen Mapを作成するためには有料版を買う必要があるのか。

Gaeaにおける実際のサイズはどうなっているのでしょう。完成したTerrainを見てると50km位は有りそうに見えます。この辺の整合性はどうやって取るんでしょう。

後は高さの設定が良く分からないです。確かWorld Machineの場合、Height Mapの高さは0から255の値でしか指定出来ないからあんまり高くすると歪みが生じるみたいな事があった気がします。

今回はExportするまでなので、それぞれのExportしたPngをどうやってUEで使用するのかまでは分かりません。

<Introduction

特にないです。

<Build maps

ここからメインです。

まずExport用のBuildの設定方法の説明から始まります。

以下に示した様にBuildしたいNodeをClickしてMark for Exportを選択します。

これは分かるんですが、何でCombineノードなんでしょうか?

と言うか最後まで見るとCombineノードは全てExportしているみたいです。

この辺は良く分からないです。

Build Tabを開くとCheckしたNodeが記録されています。

CombineのAllをClickすると以下のBoxが表示されどれをOutputするのかを選択出来ます。

その隣の.tifをClickするとどのFormatでBuildするのかを選べます。

その右上にある三本線をClickすると全部のFormatを一辺に設定できます。

まずPostにあるFinal TerrainをHeight MapとしてExportします。

これは分かります。

まずHeight Mapが必要ですし、どのNodeがHeight Mapに成るべきかと言うと最後のNodeだからです。

先程のCombine ノードと同じ様にしてExportの印をつけて

BuildにもFinal Terrainノードが追加されました。

更に以下のNodeを追加しています。

Final Albedoノードです。

こんなノード作成した記憶がないです。

Voronoiノードです、

なんでこのNode?

良く分かりません。

Combineノードです。

Combineノードは全部、Exportで選ぶのかそれとも何かの基準があるのか知りたいです。

あ。分かりました。

CombineノードにMaskとして接続しているノードを全部Exportしているんです。

VegetationノードはMaskとして使用していますが、要らないそうです。

更に特別なMaskが欲しい場合は以下に示したDataにあるNodeを追加して作成するそうです。

どのデータをBuildしてExportする必要があるのかはまだ良く分かりません。

まあ、やって行くうちに理解出来る様になるでしょう。

<Build Settings

CombineノードのSeparation MaskをOutputする場合、その方法について解説していますが、要らないのでSkipします。

Buildの設定の説明です。

DefinitionにあるMethodについてです。

Buildには3つの方法があるそうです。Normal Buildはそのまま一枚のPngにBuildします。

Splitは幾つかのPngに分割してBuildします。

Free版なのでNormal Buildを選択してResolutionに1025を選択します。

Rangeについてです。

Rawにセットすると以下のDataのまま出力するそうです。

Normalizedにセットすると

何か説明聞いても良く分かりません。

われわれが使用しているHeightである500mみたいな事言っていますが、???です。

TutorialではRawを選択しました。とりあえずRawの使用方法さえ理解しておけば問題ないみたいです。

以下の設定ではScaleが5000mなので2.441m/pxになります。

UE4だと通常の設定では1m/pxになります。その辺はどう調節するんでしょうか?

Height の調節方法については全く分かりません。この次のTutorialでUE4側の調整方法について勉強してからもう一回確認しないと分からないのかもしれません。

<追記>

ここまで来て今までm^2とmを同じ意味で使用してた事に気が付きました。

何と夢で指摘されました。

夢の中で「お前の計算、間違ってる!」と指摘されて

「何所がですか?」

と反論したら「km」と指摘されて気が付きました。

1024は一辺のPixelの数で、1pixel = 1mだと1024mです。決して1024 m^2ではありません。

私は常々「論文の正しさは単位を見ると分かる。」と言っているんですが、自分がこんな小学生でも間違えない単位を間違えていて、それをずっと気が付かなかったなんて。

しかし間違った事を今更嘆いても仕方ないですね。

今週のBlogで間違ってる箇所は直しました。それ以前のBlogで間違っている箇所は諦めて、これからBlogに書く分は気を付ける事にします。

それで上記の計算ですが、5000mを1024Pixelで表示するので5000 m / 1020 pixel = 4.882 m/Pixelになります。2.441 m/Pixelにはなりません。

これについては実装する時にもう一度Tutorialの説明を確認します。

<Export

Buildの条件について説明しています。

<Trees

BuildとExportには関係ない話なのでSkipします。

6.2 Gaea Beginner Tutorial Series : Part 5 - Build And Export [5]を実装する

それでは自分でもやってみます。

<Build maps

ここで良く分からないのはどれをExportしてどれをしないのかの基準です。

多分ですが、Maskに必要なNodeをExportしているんだと思います。

その辺に注目しながらどのNodeをExportするのかを見て行きます。

まずVegetationノードを追加したCombineノードです。

私の実装ではこの後に更に川を追加しているんですが、Tutorialは川は先に追加しているので最終形態としてのExportだと思います。

ので私の場合は最後のNodeであるこの後のCombineノードをExportする事にします。

次にPost のFinal Terrain ノードをExportします。

このNodeはHeight Mapとして利用するみたいです。

Final Albedoノードです。

このノード、私のにはありません。いつ作成したのか不明です。

良く分からないのでCombineノードの後にFxノードを追加して作成しました。

これで全然違いExportがされた場合は後で考えます。

TutorialによるとColor Mapを作成するためと言っています。Color Mapは何に使用するんでしょうか?

ここからCombineノードでMaskとして使用したNodeをExportしていくはずです。

まず、Voronoiノードです。

次はこれでしょう。私の実装だと3番目なんですが。

三番目、(私の実装だと2番目)のMaskです。

雪のMaskです。

川のMaskです。

これTutorialではFxを選択していたんですが、Blurが正しい気がします。でもTutorialと同じのを選択しておきました。

湖のMaskですが、両方選択しています。

最後Normal Mapを追加しました。

<Build Settings

まずCombine ノードのSeparation を外します。

次にBuildの設定をして行きます。

Methodは無料版で他を選択しても意味ないのでNormal Buildを選択します。

Resolutionは1025以下なのでUnrealのお勧めのサイズである1009を選択しました。

Color Spaceはどれをどんな基準で選ぶのか分からないのでそのままです。

Rangeです。

以下の解説がありました。Tutorialからは読めないのでここで検証します。

<<Raw>>

Proportionがどれを指しているのか不明ですが高さをUEで指定し直す必要がある事が分かりました。

Tutorialによると実際のNodeによるサイズを無視して以下の設定通りに作成するそうです。

<<Proportional>>

Tutorialでは歪みが生じる場合があるので使用するなと言っていました。

<<Normalized>>

こっちはNodeで指定した実際の高さを使用するそうです。今一Rawの高さの指定方法についても理解していませんが、今回はRawが指定した高さ、Normalizationが実際の高さをExportすると覚えておく事にします。

まあ、中らずと雖も遠からずでしょう。

<<Remapped>>

Min の高さとMaxの高さをここで指定しなおせるそうです。

今理解出来たのはこの位です。使用して行くうちに理解度が深まって、ここに書かれている事の本当の意味が理解出来る様になるでしょう。

このサイズでTerrainが作成されているそうです。

が今一、その意味が分かりません。

これは来週のImportの設定を勉強してからもう一回考える事にします。

これの意味が分かりました。

今表示されているTerrainのModelがこの値で作成されているそうです。

だからExportしたTerrainを本物と同じScaleにしたい時にこの値を参照する必要がある訳です。

<Export

兎に角Buildします。

Tutorialと違ってこんなに沢山のImageが生成されました。

Torのがあるのは何故なんでしょう?

と思ったらこれ今までのSave Dataでした。

Save Dataは抜かします。

大体良さそうですが、一個おかしいのがあります。

これは失敗していますね。

Tutorialを見ると

似たような結果になっていました。

と言う事は大丈夫かも。

それよりTutorialでは

がありますが、私のにはありません。

設定ではGenerate Build LogにCheckを入れています。

何でなんでしょう?

まあ、後は来週のUEでImportしてから検証します。

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

7.雪山のMapの作成

先週から曇り空の作成を開始し始めました。

今週、やりたい事は

M_Sky_Panning_Clouds2で使用されているT_Sky_Sphereについて調べる事です。

7.1 T_Sky_SphereとM_Sky_Panning_Clouds2を検証する

色々やったんですが、結論から書くと以下の様に雲を増やす事は出来ませんでした。

ただ背景の青を灰色に変更する事は出来ました。

それはT_Sky_Sphereにある以下の項目に使用されているC_Sky_Zenith_Color_testの値を変化させる事で可能でした。

その上で雲の明るさを

に設定すると以下の様になります。

これ位なら曇り空に見えます。

これでOKにします。

どうやってこれを実現したのかですが、基本的にはここで説明した通りなのですが、その前に色々弄り過ぎて良く分からない部分もあります。

ので来週、もう一回やってみてその手順をこのBlogにまとめる事にします。

7.2 Volumetric Cloudに関する勉強

Tutorialを探していたらUnreal Engine 5 Beginner Tutorial | Sky And Clouds [6]というUE5における空の作成方法を一から教えているTutorialを見つけました。しかもVolumetric Cloudの解説をしています。

今週は、こっちを勉強する事にします。

7.3 Unreal Engine 5 Beginner Tutorial | Sky And Clouds [6]を軽く見る

軽く見ましたが、UE4と違いT_Sky_Sphereを使用してないみたいです。後、Volumetric CloudはMaterialを使用するみたいです。

以下にそれぞれの節の内容をまとめます。

<Introduction to the Sky and Clouds in Unreal Engine 5

特になし。

<Creating a Project

一応、初心者のためにProjectの作成方法から解説しています。

ここで大切なのはRay Tracing は使用しないと言う事です。

<Saving the Level

このTutorialが作成されたのが、2022の一月なのでEmptyなLevelを作成する方法が今とは違っています。

そんだけです。

<Directional Light

何故かDirectional Lightから追加します。まあ順番はどうでも良いです。

Directional LightはMovableにセットしています。

今、ふと思ったんですが、Lumenが効いていてもDirectional LightのMovableには影響ないんでしょうか?

誰か確認したんですかね。

<Sky Light

今度はSky Lightを追加しています。

Sky LightはIndirect Lightingを司っているそうです。

これは先週のUE4での実験結果とも一致します。

この後、Real time CaptureにCheckを入れます。

すると以下のErrorか警告?が表示されます。

その要求に従ってSky Atmosphereを追加しましょう。

<Sky Atmosphere

Sky Atmosphereを追加しました。

以下のBoxにCheckをします。

これでDirectional LightとSky Atmosphereが繋がってDirectional LightをSun Lightとして使用するそうです。

確かにSun Lightが現れました。

と言う事はUE4におけるT_Sky_SphereはUE5ではSky Atmosphereになっているんでしょうか?

まあ、空の作成方法について勉強始めたのが先週からなのでまだ何とも言えません。

<Rotate the Sun in Unreal Engine 5

太陽の動かし方についてです。

Directional Lightを選択してRotateさせます。

別なやり方です。

こっちの方がPopularなやり方みたいです。このやり方は実装する時に試してみます。

<Exponential Height Fog and Volumetric Fog

今のLevelは以下の様な状態になっています。

地面が真っ黒です。

これを直します。

Exponential Height Fogを追加します。

すると以下の様になります。

確かに地面が真っ黒であるのは直りましたが、何か変です。

Tutorialによるとこの変な感じはBlown outしているからだ。と言っています。

この場合のBlown outは

を指していると思われます。

Tutorialでは以下の方法で直しています。

まずFog Inscatteringに黒をセットします。

次にDirectional Inscatteringも黒をセットします。

更にVolumetric FogにCheckを入れます。

結果です。

うーん。少しはマシになったんでしょうか?

正直、分からん。

今度は空と地面の境目のボケを直します。

Project Settingを開いてSupport Sky Atmosphere Affecting Height…にCheckを入れます。

結果です。

いや、空と地面の境目更にぼけているじゃないか?

と思ったんですが、TutorialではこれでExponential Height Fogは太陽の位置によって色を変化するようになりました。とか言っています。

空と地面の境目をはっきりさせるためにやっていたと思ったんですが聞き間違い?だったんでしょうか?

これも実装する時確認します。

<Volumetric Clouds in Unreal Engine 5

はい。

やっとVolumetric Cloudについてです。

UE5だと雲は全部Volumetric Cloudで追加するみたいです。今のところ空には雲は一つもないからです。

Volumetric Cloudを追加しました。

結果です。

凄い雲が追加されました。

Tutorialでは、この雲滅茶苦茶嘘くさい。それを直します。と言っていますがそんなに変には見えません。

でもTutorialの言う直し方を勉強しておきます。

これはCloud Materialのせいだそうです。

そしてMaterialから直すのが最も正しい直し方だそうですが、このTutorialを見てる初心者にはそれは無理なので別な方法で直すと言っています。

というかMaterialの使用方法を知っているような熟練のUserが初心者向けのこのTutorialを見てるなんてアホな事してない事を祈っています。ぐらい言ってました。

うるせー。

と思いながらも半分位は納得してしまいました。

しかし空の構成については全く知らないので、初心者向けのTutorialから勉強するしかありません。

<Volumetric Plugin and Cloud Materials

それで初心者のために準備した別な方法ですが、UE5に元から備わっているCloud Materialを使用する方法だそうです。

まずPluginのVolumetricsを使用出来る様にします。

そしてSettingからShow Engine ContentをCheckします。

すると以下に示した様にEngine Contentが表示されます。

更にその後で、SettingのShow Plugin Contentをチェックすると

以下に示した様に全てのPluginのFolderが表示されます。

たしか、このPluginのFolderってShow Engine ContentにCheckを入れないと表示されなかったはずです。

それは後で確認します。

Volumetrics Contentがあるのでそれを開きます。

その中には以下のFolderがあります。

Skyを開きます。

以下のCloud Materialが存在しています。

以下のCloud Materialを使用します。

Volumetric Cloudを選択して以下のMaterialに先程のCloud Materialを使用します。

以上です。

<Cloud Settings

Volumetric CloudのSettingについてです。

まずLayer Bottom Attribute…についてです。

雲の底辺の高さを調節します。

Layer Heightです。

雲の厚さを調節しているようです。

<Light Shaft and God Rays

Directional Lightの調節です。

Light Shaftを入れるために以下の二つのCheckを入れます。

Light Shaftって何?

それが分からん。

調べたらGod Rayの別名みたいです。

<Outro

特にないです。

<感想とまとめ>

かなり分かり易いTutorialでした。このTutorialの作者は、pink pocket TVです。

覚えておく事にします。

7.4 Unreal Engine 5 Beginner Tutorial | Sky And Clouds [6]を実装する

それでは実際に自分で実装してみます。

<Introduction to the Sky and Clouds in Unreal Engine 5

特にやる事はないです。

<Creating a Project

このために新しいProjectを作成するのも勿体ないのでいつものUE5のProjectを使用します。

Empty Levelを使用して新しいLevelを作成しそこに空を作成する事にします。

<Saving the Level

Saveしました。

以下の2つも同時に作成されましたが、これらはLevelの何かを表しているんでしょうか?

良く分かりませんが、今週の勉強には関係ないので無視して先に行きます。

<Directional Light

Directional LightをLevel上に配置しました。

あれ、先程出来た2つもLevel上に配置されています。

ああ。分かりました。

その2つはWorld Partition用のデータでした。

World Partitionを勉強した時に、World Partitionが使用可能になるようにProjectそのものの設定を変えたんでした。多分そのせいでしょう。

勿論、Directional LightのMobilityはMovableにセットしました。

<Sky Light

Sky Lightを追加しました。

Sky Lightを追加しただけでは、Levelは真っ暗なままです。

Tutorialの説明通り、MobilityをMovableに変更し、

Real Time Captureにチェックを入れます。

するとTutorialの説明通り以下のErrorが表示されました。

<Sky Atmosphere

Sky Atmosphereを追加します。

空が生成されました。

TutorialではDirectional LightのAtmosphere Sun LightにCheckを入れるまでは空が現れないんですが、私のは直ぐに空が生成されました。

Directional Lightの設定を確認すると

既にCheckされています。

<Rotate the Sun in Unreal Engine 5

太陽の位置を回転させます。

Directional Lightを選択してRotateさせました。

それでは、次のやり方を試してみます。

Ctrl + Lを押します。

うおー。何かスゴイUIが表示されて太陽からの光の方向を示しています。

Mouseを動かすと太陽からの方向を示す矢印がグイングイン動きます。

凄い!

ただCtrl + Lは押しにくいです。後このUI、5秒位立つと消えてしまいます。

<Exponential Height Fog and Volumetric Fog

やっぱり地面直すって言っています。

まあいいです。Exponential Height Fogを追加します。

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

設定を変えます。

Fog Inscattering Colorは既に黒になっていました。

Directional Inscattering Colorも黒くなっていました。

Volumetric FogにCheckを入れます。

以下のような感じになりました。

Tutorialではここから地面との境界をもっとぼやかすための設定を行います。

しかし私のLevelは既に地面との境界はぼやけています。

Directional Lightの角度を変更して空を青くしてみました。

やっぱり地面との境界は既にぼやけています。

一応、Tutorialのやっている通りにやってみます。

Project Settingから以下の項目にチェックを入れます。

やっぱり既にチェックが入っていました。

<Volumetric Clouds in Unreal Engine 5

Volumetric Cloudを追加します。

結果です。

スッゲエ。

<Volumetric Plugin and Cloud Materials

Volumetricsのpluginを追加します。

PluginのContentを表示させるのにEngine のContentを先に表示させる必要があります。

その理由が分かりました。以下に示した様にPlugin FolderはEngine Folderの中にありました。

Volumetricsの辺りを探すとVolumetric Cloud用のMaterialがありました。

以下のヤツを使用します。

Volumetric CloudのMaterialにセットします。

Renderingするのに凄い時間が掛かっています。

結果です。

<Cloud Settings

Layerの調節を行います。

雲の底面の高さが変化して見てて面白いです。

雲の厚さが変わります。

<Light Shaft and God Rays

God Rayを追加します。

Directional Lightの

にCheckを入れます。

変化が分かりません。

何もない状態です。

Light Shaft Occlusionにチェックを入れます。

あんまり変化無い様に見えます。

Light Shaft BloomにCheckを入れます。

これは大分違いますね。

<Outro

特になしです。

7.5 空の作成方法を勉強して

空の作成方法の基礎が大体分かって来ました。Volumetric Cloudを勉強したらUE4でも雲を追加出来そうです。

UE5の空の作成方法の方がSimpleで分かり易い気がします。

後は、Volumetric CloudのMaterialの作成方法が分かれば、それなりに自由に空に雲を追加出来る気がします。

8.UI Designの勉強

今週はGameの名前を決めてそのLogoを作成します。

8.1 Gameの名前を決める

先週、以下の候補考えました。

一週間考えたんですが、

  • ハンター X モンスター

が一番、分かり易いと思いました。

読み方は、ハンター エックス、モンスターとします。

そこまで考えてから気が付いたんですが、モンスターハンターと名前がかなり似ています。後、ポケモンらしさがないです。

Blogではあんまり書いてなかったんですが、世界中に散らばっているモンスターを集める時、モンスターとは戦いません。その代り英語の単語の問題を出す予定です。発音のMinimal Pairか、単語のSpellの問題を出す予定です。

それでポケットモンスターみたく英語モンスターと言うのはどうでしょうか?その上で緑と赤みたく発音と単語の二つのVersionを作成します。

英語モンスターだとちょっと怖い感じがします。英ごモンスターならどうでしょうか?

  • ハンター X 英ごモンスター(発音編☆)
  • ハンター X 英ごモンスター(単語編☆)

どうせ発音に興味があるのは女の子だけなので、発音編は緑色、単語編は赤色にします。

星の数が難しさを表して、星一個は中学校一年生Levelを表します。

本当は中一レベルと書こうと思ったんですが、それだと大人とかが買いづらい可能性がありますので、星で表す事にしました。

8.2 Logoをデザインする

Hunter x Hunterとポケモンのdesignを足して二で割ったようなデザインにします。

Hunter X HunterのLogoは英語だったです。でも英語だと勉強に抵抗が生まれる可能性があるのでカタカナにしました。

ハンターのハの文字だけ大きくしました。

今はこれで十分です。

もし本当に売れそうな内容になったらプロのDesignerに頼む可能性もあります。

8.3  Main Screenにロゴを組み込む

組み込みました。

後はイラストと音楽を足して完成です。

イラストは来週までに考えます。

9.Blenderの勉強

今週も夏森轄(なつもり かつ)先生の【Blender】セルルック講座 ~ノード、輪郭線、法線転写、RGB分離~ [15]の続きを勉強していきます。

9.1 Blender】セルルック講座 ~ノード、輪郭線、法線転写、RGB分離~ [15]の続きを勉強する

BlenderのDataをSaveしていなかったので先週までやった分をやり直しました。

今週はもう時間が無いので少しだけやります。

ここから色を追加するそうです。使うNodeはRGBミックスと反転ノードだそうです。

<RGBミックス>

RBGミックスノードはこれの事ですね。

このNodeの詳しい解説がTutorialでされているのでそれ聞いて済ましてしまいます。

<反転ノード>

反転ノードはInvert ノードでした。

これはTutorialにはあまり解説が無かったので調べます。

BlenderのInvertノードに関する公式のDocumentを読んだんですがあんまり分かり易い説明はありませんでした。

私が推測するにUEのMaterialのOne Minusノードと同じ働きをしているモノと考えます。つまり0は1、1は0に変換します。

ここでFacは何をしているのかが不明です。1-Color*Facをやっているんでしょうか?

<実装>

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

結果です。

一応、Tutorialと同じ感じにはなっていますね。

今週はもう時間がないのでここで終わりです。

10.Anime Rendering(アニメレンダリング)の勉強

これは来週からやる事にします。

ここで勉強する予定の内容を書いておきます。

11.まとめと感想

沢山やるより質の向上と優先順位を決める必要があります。でないと永遠に勉強だけする事になってしまいます。

後、来週は用事があるのでお休みします。

12.参照(Reference

[1] CGHOW. (2022, June 12). Unreal Engine 5 Niagara Beginner Tutorial - UE5 Niagara Starter Course! [Video]. YouTube. https://www.youtube.com/watch?v=NcJ1ZP7tFUk

[2] MasterClass. (2021, August 19). How to Write a Novel in 10 Steps: Complete Writing Guide. Retrieved June 26, 2022, from https://www.masterclass.com/articles/how-to-write-a-novel#how-to-write-a-novel

[3] Cloward, B. [Ben Cloward]. (2022, May 19). Texture Tiling Without Repetition - Shader Graph Basics - Episode 47 [Video]. YouTube. https://www.youtube.com/watch?v=F7UxUgow4yg

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

[5] Klaus. (2022, January 23). Gaea Beginner Tutorial Series : Part 5 - Build And Export [Video]. YouTube. https://www.youtube.com/watch?v=PpaRzdT_Qx4&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=5

[6] pinkpocketTV. (2022, January 14). Unreal Engine 5 Beginner Tutorial | Sky And Clouds [Video]. YouTube. https://www.youtube.com/watch?v=lYZoR3ZLD-o

[7] 夏森轄(なつもり かつ). (2022, May 21). 【Blender】セルルック講座 ~ノード、輪郭線、法線転写、RGB分離~ [Video]. YouTube. https://www.youtube.com/watch?v=e1tFq5OoSY0

[8] Epic Games. (n.d.-c). Stylized Rendering. Unreal Engine Documentation. Retrieved June 19, 2022, from https://docs.unrealengine.com/4.27/en-US/Resources/Showcases/Stylized/