UE4の勉強記録

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

UE5の勉強 -LandscapeのみのGameを作成する-

1. 今週の予定

今週もDirectX 12の勉強から始めます。

1.1今週の予定

DirectXの勉強>

Olympus Game Engineの作成の続きといつもの3冊の教科書を勉強します。

<LandscapeのみのGameを作成する>

先週勉強したやり方で海の波に泡を追加します。

<Materialの勉強>

Ben Cloward先生のAdvanced MaterialのTutorialをやります。

Niagaraの勉強>

CGHOW氏のTutorialをやります。先週の実装の続きを行います。

<戦闘システムの続きを作成する>

UIの改善の続きを行います。

それぞれのWidget毎にする作業を示す指示Commentを作成します。

それが終わったら一応完成とします。

<Gaeaの勉強>

今週はGeologyの勉強だけです。

<Houdiniの勉強>

Houdiniの勉強は一端お休みしてUE5.2のProcedural Content Generationの勉強をします。

<UEFNの勉強>

先週の実装の続きを行います。

YouTube動画の作成>

Mind Map Appを使用して話す内容を整理します。

Davinci Resolveの編集方法についてもう少し勉強します。

2.DirectXの勉強

今週もいつもと同じように勉強します。

2.1 Olympus Game Engineの作成

今週からC++ DirectX 12 Game Engine - [S01E04] - Settings and Loggers [1]の勉強になります。

今週はこのTutorialがどんな事をやっているのかを把握するために軽く全部見ます。

2.1.1 C++ DirectX 12 Game Engine - [S01E04] - Settings and Loggers [1]を軽く見る

<Intro>

なし。

C++ DirectX 12 Game Engine Episode 4 : Settings and Loggers>

このTutorialではLogger Classを作成するそうです。

Tutorialによると「Logger Classは我々のProgramと自由にCommunication出来る。」そうです。

この文章、一見Logger Classの機能を簡単に解説しているように見えて、実際はよく意味が分からないですね。

例えば我々のProgramってOlympus Game Engineを指すんでしょうか?それともBlank Projectを指すんでしょうか?

自由にCommunication出来るの意味も単にLogを記録する以上の機能が備わっている感じを受けます。

それはともかく、この機能を実装するためには、ClassやFunctionをLibraryとして作成する必要があるそうです。

それらの具体的な実装方法についてこのTutorialでは勉強するみたいです。

<Our Logger Class>

Tutorialがこう言っていました。「我々が質問する前にProgramの方から自発的に何が起きたのかを報告するようにした方が何倍も簡単にCommunication出来きます。」

はい。

それはそうでした。

つまりそれは普通のLoggerと同じって事ですね。

それでLogをTextとして残す機能を持ったLogger Classを作成するそうです。

この後は具体的な実装を説明してます。

<Print Log Function>

Logger Classで作成したTextの内容をPrintする機能が必要です。

その機能を持つFunctionを作成します。

後、MicrosoftのApp Data Folderは何であるのかについての解説がありました。

App Data FolderをこのLog Functionでも使用します。

後は実際の実装方法の説明みたいです。

<Per Game Settings>

ここはもう具体的な実装しかやっていません。

これ軽く見ただけでは何を具体的にやっているのかまでは分かりません。

<Perfect Timing>

ここからは分かる範囲だけでまとめます。

ここではTime Classを作成しています。

Logに記録したTextに日付と時間も記録する必要があります。そのためのClassだそうです。

最後に時間が追加されたTextを保持しているLogを示していました。

<M Tail Tailing>

M TailはProjectが実行している脇で同時に実装されるProgramだそうです。

何をするProgramなのかはまだ分かりません。

Tutorialでは、最初に実装方法を示すと言ってこのM Tailが何をするためのものかは全く説明しないです。

分かりました。

M Tailは以下に示した別なApplicationでこれをProjectに最初から含んでおくそうです。

そしてProjectを開始したらこのM Tailも起動するようにします。

以下の様にLogがUpdateするたびにM Tailがそれを記録しています。

うーん。

でもこの機能をこれまで作成して来たんじゃないの?

あ。分かりました。

このM TailはそのLogに記録されている内容を同期して示しているです。

つまりProjectを実行しながらLogの内容を見る事が出来るんです。

うーん。

理解出来ました。

<A Finished Logger>

ここはこのTutorialのまとめです。

<Outro>

特にないです。

2.1.2 C++ DirectX 12 Game Engine - [S01E04] - Settings and Loggers [1]を軽く見た感想

大体、このTutorialが何をやっているのかは理解しました。

来週からそれぞれの節の勉強と実装を行います。

それよりもこのTutorial Series後一個で終わりです。

これはDirectX 12についてはこれ以上このTutorial Seriesで勉強する事は出来なそうです。

2.2「DirectX 12の魔導書」の勉強

2.2.1先週の勉強を復習する

先週のBlogを読み直したら以下の事が書いてありました。

先週は、教科書の「3.3.5 Render Target View (RTV)」の実装を行おうとしてこの部分の実装をSample CodeからそのままCopyしたんです。

しかしこの部分の実装が実際は何をやっているのか分かっていません。

ので今週はそれを解読します。

2.2.2 先週書いたCodeの内容を解読する

Projectを見直すと先週書いたCodeはもっとありました。

まずこの部分です。

まず教科書から読み直します。

「3.3.5 Render Target View (RTV)」の「Swap ChainのMemoryと紐づける」を読んだら、そもそもDXGI_SWAP_CHAIN_DESC型であるswcDescは、Swap Chain内にあるBufferの数を調べる事が出来るから作成した。みたいな感じで書かれていました。

あれ?

ではswcDescはBufferとは何の関係もないの?

先週、以下の様に解釈したんですが、間違っていましたね。

一応確認のために公式のDXGI_SWAP_CHAIN_DESC structure (dxgi.h) [2]も見てみます。

はい。

先週の解釈は間違っていました。

指定したSwap Chainの情報を保持しているのがswcDescでした。

先程の公式のSiteでそのSwap Chainが持つBufferの数を示すMemberについても解説されていました。

つまりここは単純にSwap Chainが持つBufferの数を調べているだけでした。

次のCodeです。

この_backBuffersがSwap ChainにあるBack Bufferと紐づけられるんでしょう。

教科書を読んでもそんな感じで解説しています。

For Loop内のCodeです。

ここで_backBuffersにSwap ChainにあるBufferと紐づけています。

となると今度はこの_backBuffersと前に作成したDescriptor HeapのViewを紐づける訳です。

ここでCreateRenderTargetView()を使用するのか。

教科書では散々この関数がSwap ChainにあるBufferとDescriptor HeapのBufferを紐づけると言っています。

この関数の名前から察するとDescriptorのViewはこの時点で作成されるみたいで、この関数が呼ばれるまではViewのMemoryは確保しているけどそれだけのようです。

そしてそこにSwap ChainにあるBack Bufferが書き込まれるのか。

これも直接Swap Chainから書き込むんじゃなくて先程作成した_backBuffersを介して書き込む必要が有るのか。

大体、このCodeが何をやっているのか分かって来ました。

それでは今週のMain DishであるCreateRenderTargetView()について調べます。

公式のCreateRenderTargetView()[3]から見ていきます。

やっぱりViewはこの関数で生成されています。

この関数のParameterです。

最初のParameterは、Swap ChainのBufferを指定します。

しかしここで使用出来るのは、ID3D12Resource型だけです。

それで先程の実装でID3D12Resource型である_backBuffersにSwap ChainのBufferを移していたんです。

次のParameterはnullptrです。

ここは教科書の説明が分かり易いです。Mipmapのどのサイズを使用するのかを指定するそうです。今回はMipmapは使用しないのでnullptrにセットしました。

そして最後のParameterです。

要するにこれはDescriptorが収納されるMemoryのAddressを示してるんでしょう。

教科書ではViewのAddressのようなものと書いてありました。

まずこの値の求め方ですが、

以下の関数を使用して求めます。

rtvHeapsはDescriptor Heapです。

教科書の説明によるとこの関数は最初のViewのAddressだけしか示してくれないそうです。

次のViewのAddressを示すためには、

以下の実装で得た値を足す必要が有ります。

これ、Sample Codeと教科書のCodeで微妙に内容が違います。

こっちはSample Codeの方です。

教科書をよく読んだら、このSample Codeのやり方は教科書の別解のやり方と同じでした。

もうこれは次のViewのAddressはこのやり方で得る事が出来ると覚えてしまいます。

一個ずつMemoryを数えても分かる訳ないです。

はい。

これで先週書いたCodeの意味が判明しました。

2.3 「HLSLシェーダーの魔導書」を勉強する

2.3.1 先週の復習

先週は「複雑な3Dモデルの表示へ」を読みました。

そして以下の事を読んで衝撃を受けていました。

これ、全く考えていなかったです。

それで今週はもう一度、この3つに注目して「Chapter 3 Shaderの基本」を読み直します。

2.3.2 「Chapter 3 Shaderの基本」を読み直す

Descriptor Heapで初めてBufferについて話しています。

でもIndex Bufferとかの話はないですね。

そもそも最初のまとめは三角形を描く話で、このDescriptor Heapの話はその三角形の位置をずらす実装についての話です。

前のChapter 2で三角形を作成していました。

正しここではBufferの話は全くしていません。

ここからChapter 3の最後まで読んだんですが、何とIndex Bufferについての説明は全く無かったです。

いやIndex Buffer自体はChapter 2の何か所で使用はしています。がまだこれは分からなくて良いです。としか書いていません。

という事は現時点ではまだIndex Bufferの説明はないという事でした。

それなら先週、この文章を読んだ時にIndex Bufferってなんだっけ?ってなるのも不思議では無いです。

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

来週は実際のCodeを見ながらChapter 3の内容(特に以下に示した手順の部分)の検証をします。

2.4「Direct3D 12 ゲームグラフィック実践ガイド」の勉強

2.4.1 先週の復習

先週はSwap Chainの実装をして終わっています。

あ、思い出しました。

この教科書ではSwap Chainの構造体であるDXGI_SWAP_CHAIN_DESCのそれぞれのMemberの機能について凄いしっかり解説しているので、それぞれのMemberについてしっかり勉強したんでした。

それが終わったので次の作業として先週は、Swap Chainの生成を実装したんでした。

となると今週はその後の部分をやる事になります。

2.4.2 Double Buffering用のBack Buffer番号を取得する

教科書の「2.3.3 Swap Chainの生成」の最後の部分です。

DirectX 12の魔導書」ではBack Bufferの番号なんで取得したんでしょうか?

憶えていません。

取りあえず今週はBack Bufferの番号の取得方法を勉強します。

まず以下に示した様にIDXGISwapChain3を取得します。

そのIDXGISwapChain3のMethodであるGetCurrentBackBufferIndex()関数を使用してBack Bufferの値を得ます。

その後で要らない変数を解放しています。

うーん。

色々疑問があります。

まず何で最初からSwap Chain3を取得しなかったんでしょう。

調べます。

調べました。

Swap Chainを作成するpFactory変数の型であるIDXGIFactory4 interfaceですが、

IDXGIFactoryまでさかのぼりましたがCreateSwapChain3()と言う関数は無かったです。

という事は最初はSwap Chainを作成してそれを元にSwap Chain3を作成するしかSwap Chain3を作成する方法が無いみたいです。

うーん。

DirectX 12の魔導書」でもそうでしたっけ。

確認します。

なんと、「DirectX 12の魔導書」ではCreateSwapChainForHwnd()関数を使用していきなりSwap Chain1を取得していました。

正し「DirectX 12の魔導書」ではこの後すぐにDescriptor Heapを作成して今週勉強したSwap ChainにあるBack Bufferとの紐づけを行っています。

Swap ChainのBack Bufferの番号の取得なんかしていません。

うーん。

面白い。

目的地は同じなのにそこへの道程は違うという訳です。

次の節である「2.3.5 Render Target Viewの生成」を軽く読みましたが、少なくともその説明とやり方は「DirectX 12の魔導書」の説明とやり方とかなり違うように思えました。

これはかなり勉強になりそうです。

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

3.LandscapeのみのGameを作成する

今週は先週勉強したNumenBrothers氏のLet's Build the RPG! - 55 – Unreal Engine 5 Water Ocean and Island Tutorial [4]を実装してWater Body OcceanにFoamを追加します。

正し、この先週勉強したやり方はUE5.1のものなので私のUE5.2のProjectでは出来ない可能性もあります。

その辺は試しながら確認します。

後、Water Body SystemのPluginにあるMaterialの実装を変更すると後でDefaultの実装が分からなくなるので、MaterialはCopyしてそのCopyしたのを変更します。

3.1 Let's Build the RPG! - 55 – Unreal Engine 5 Water Ocean and Island Tutorial [4]を実装してWater Body OcceanにFoamを追加

まずはMaterialの確認からやっていきます。

Water Body OcceanのWater Materialには以下のMaterial Instanceがセットされていました。

Water_Material_Oceanを開くと以下のInstanceがParentにセットされていました。

開きます。

今度はWater_Materialをセットします。

開きます。

Tutorialの説明と同じようにBeach Foamがありました。

ただ実装内容は全然違います。

Let's Build the RPG! - 55 – Unreal Engine 5 Water Ocean and Island Tutorial [4]の結果をそのまま使用するのは無理ですね。

ただBeach Foamの中にEnable Ocean Foamがあるので

もう単純にInstance側からこのParameterをEnableしたらFoamが形成されそうな気がします。

Instance側を見てみます。

Water Material Instです。

Falseのままにされています。

Water Material Occeanです。

あれ、Enableになっています。

という事は以下のFoam関連の値をいじったらfoamが生成されるという事でしょうか?

全部のParameterがDefault値なので値を変えたとしても後で直ぐに戻せます。

一応、念のために以下のようなCopyを作成してこれを

Water Body OcceanのWater Materialにセットして

このMaterial Instanceの値をTweakする事にします。

色々いじったんですがFoamは形成されません。

これは先程のWater MaterialにあるBeach Foamノード内の実装が効いていないんです。

確認します。

以下のNodeが繋がっていませんでした。

あれ?

このNodeどっかで見た事あります。

先週のBlogを見直したら、Water Materialの実装内で

しっかりとBeach Foamの実装を開いてBeach Foamの実装を直していました。

あれ。

すっかり読み飛ばしていました。

Maxノードの繋げ先のNodeであるHeight Mapノードもありました。

Output Foam Scatteringノードはありますが、

この結果をどのMultiplyノードに繋げる必要が有るんでしょうか?

これでした。

一寸考えます。

このBeach Foam Material Functionの実装を変更するとこのEngine全てのBeach Foam Material Functionの実装が変更してしまいます。

それは避けたいです。

のでこれをDuplicateしてそのDuplicateした方を変更します。

しかしこのMaterial Functionを変更したら、このMaterial Functionを使用しているWater Materialも同様に変更する必要があります。

そしてそのWater MaterialのInstanceであるWater Material Instも変更します。

更にその子 Material InstanceであるWater Material Occeanも変更する必要が出て来ます。

3.2 それぞれのMaterialのCopyを作成する

それぞれのMaterialのCopyを作成します。

しました。

それぞれの名前の最後に_meを追加して元のMaterialとの差別化をしました。

Water Material Meです。

Beach Foamに使用されているBeach Foamノードを外してBeach Foam meノードを代わりに使用しました。

Water Material Inst Meです。

ParentにWater Material Meをセットしました。

Water Material Ocean Meです。

ここにWater Material Inst Meをセットします。

これでBeach Foam meの実装を変更させたら今使用しているWater Body Oceanにだけ変化が現れるはずです。

更にPluginにある元のMaterial達は変更されないので他のProjectで普通に使用する事が出来ます。

3.3 Beach Foam Me Material Functionの実装を改造する

Tutorialの解説通りに改造します。

しました。

それではWater Material Ocean MeのParameterをTweakしてみます。

Depth for DF Foamの値を2にしました。

結果です。

はい。

海岸にFoamが生成されました。

今度はFoam Distanceの値を1250にします。

結果です。

FoamでTilingが起きています。

Tutorialの綺麗なFoamとは全然違います。

Foam Depth Minの値も1000に変更しました。

結果です。

これはどう見ての駄目でしょう。

Foamの形は海岸の高さと関係あるようです。

同じ条件でもギザギザしていない箇所もありました。

とりあえずTutorialでTweakしているParameterを変更していきます。

Foam Depth Minの値を1000にします。

泡の位置が後退しました。

Foam Scatter Biasの値を0.2にします。

Foamの位置が後退しました。

次です。

Foam Scattering Mipの値を7.0に下げました。

結果です。

これ値を下げるとTilingが更にはっきりしてしまいます。

Height Biasです。

1に変更すると

全部Foamになりました。

これは-1に戻します。

更にCausticsをEnableします。

青い光の筋が表示されるようになりました。

これも要らないです。

切ります。

色々、設定をTweakした結果

以下の様になりました。

この部分だけ見るならかなり良いです。

泡そのものを評価するには海岸線を一周して確認する必要があります。

3.4 海岸線を移動し海の泡の形状を確認する

とりあえずは、異常な箇所だけScreenshotを取ります。

泡の境界がはっきりし過ぎています。

この箇所、突然、Foamの向きが変わって量が少なくなっています。

この位置の海岸線の設定を調べるとFoamの形状と海岸線の向きとの関係が分かるような気がします。

以下に示した様にCylinderをセットしBookmark8に指定しました。

この部分のFoamの調整は来週やります。

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

4.Materialの勉強

今週もBen Cloward先生のAdvanced MaterialのTutorialを勉強します。

4.1 Hair Shaders - Advanced Materials - Episode 13 [5]を勉強する

今週は髪の毛のRenderingの話です。

まず軽く全部見ます。

見ました。

3D Modelで最も興味深い話題の一つである髪の毛の話なので、流石に面白かったです。

Unityで髪の毛のRenderingについて解説していたんですが、ほとんど理解する事が出来ました。

以下に内容をまとめます。

まず髪のMaterial的な特徴です。

以下に示した様に髪のSpecular Lightは非常に独特です。

まずSpecular Lightは表面がざらついた金属の表面で起きるようなAnisotropicな形状をしています。

さらに近づいて見ると、Specular LightがDirectional Lightそのものの色と、Directional Lightの色と髪の毛の色が混じった2種類がある事が分かります。

この2つのSpecular Lightが存在する事に関してはTutorialで簡単な説明がされていました。

以下に私が理解した範囲でまとめます。

一つ目のDirectional Lightと同じ色のSpecular LightはDirectional LightがReflectionしたものです。これはいつも発生しているSpecular LightとAnisotropicな形状をしている事を抜かせば同じです。

Directional Lightの色と髪の毛の色が混じった2つ目のSecular Lightは、髪が半透明である事から発生するそうです。

一部の光はRefractionを繰り返しながら髪の毛の中を移動し、最終的に髪の表面から放出する訳です。

これが2つ目のSpecular Lightを形成します。

ここからUnityのSampleを使用したUnityにおける髪の毛のRenderingについての解説になります。

これUnrealには直接の関係はないんですが、2つの髪の毛の作成方法について分かり易い解説をしているので、今回はこれもまとめる事にします。

<Per-Strand Geometry>

これは一本一本の毛を忠実にRenderingする手法です。

こんな事してGPU大丈夫なのかと思います。相当最新の高性能のGPUを使用する必要があるでしょうね。

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

<Card Geometry>

以下に示したPolygonを使用しています。

TutorialではStripっていっています。RibbonみたいなGeometryの事なんでしょうか?

Unityでは2種類のCards Geometryが使用されているそうです。

この後、Tutorialではこれらの髪のParameterの中で大事なヤツの紹介をしています。

これ自体は面白いんですが、Unity使う訳じゃないのでここでまとめる事はしません。

ここからUEを使用しての髪のRenderingについての解説です。

やっとUnrealの番かと思ったら、またMeta-HumanのModelでした。

そういえばMeta-Humanで作成したModelをUnrealにExportする方法はまだ勉強してなかったです。

先週は結構、熱心にMeta-Humanを勉強しましたが、今週は既にその熱意が枯れてしまっています。

正直、Meta-Humanを勉強するならVroidを勉強します。

それよりもHoudiniでアニメ調の3D Modelを作成出来ないか気になります。

そっちを頑張りたいです。

はい。

Unrealの髪の毛ですが、Unityの髪の毛と全然違います。

まず近い状態ではPer-Strand Geometryを使用してRenderingします。

そして遠い状態では以下に示した様にCard Geometryを使用してRenderingするようになります。

Unityが2つのRenderingを用意してUserが選択出来るようにしているのに対して、Unrealは一つのRenderingだけ用意して、そのRenderingの方法をCameraからの距離によって変えているんです。

2つのGame Engineの髪の毛に対してのApproachの違いがよく分かって面白いです。

この後、Unrealの髪のMaterial InstanceのParameterの機能について解説しています。

これもそれなりには面白いですが、まとめる程の内容では無いのでSkipします。

以上です。

<最近のMaterialのTutorialについて>

なんか最近のAdvanced Material Tutorialは実際にMaterialで実装するのではなくて、Game Engineに備わっている機能の紹介が多い気がします。

この節と次の節のNiagaraは筋トレのようにひたすらMaterialの実装を勉強するための節です。あんまりGame Engineの機能の紹介ばかりのTutorialになるなら別なTutorialを勉強する事も検討する必要があります。

もしくは、NumenBrothers氏のRPGのTutorial Seriesを代わりに勉強するのも良いかもしれません。

5.Niagaraの勉強

今週は先週、途中まで実装した Decal Renderer in Unreal Engine 5.2 Niagara Tutorial [7]の続きをやります。

5.1 Decal Renderer in Unreal Engine 5.2 Niagara Tutorial [7]の実装の続き

<Animating>

Materialの実装を以下の様に変更します。

このTextureが必要です。

以下のNoiseのTextureを作成しました。

ではMaterialを作成します。

出来ました。

今度はNiagara Systemの変更を行います。

以下の様になりました。

結果です。

Tutorialの結果とは違い、Decalの境界がはっきり見えています。

MaterialのRadial Gradient ExponentialノードのRadiusの値にDecal ColorのRが繋がったままでした。

直しました。

結果です。

今度は綺麗に出るようになりました。

今度はこのEffectに回転を追加します。

Render sectionにあるDecal Renderer Moduleの

Decal Orientation Bindingにあるのは[PARTICLE] Decal Orientationでした。

Particle Spawn SectionにあるSet Parameter Moduleに

[PARTICLE] Decal Orientationをセットします。

値を以下の様に変化しました。

結果です。

色を青くしました。

流石にこのやり方まで記録する価値はないと思いますので結果だけ示しておきます。

ここからDecalが垂直方向に引っ張られている事とその直し方を示します。

分かり易いようにCubeを置いて示しました。

面白いのは垂直面でもY軸方面は引っ張られていない事です。

X方面の垂直面だけ引っ張られています。

まずTutorialの直し方で示された実装をそのまま試して見ます。

実装しました。

本当にTutorialの実装をそのまま再現しました。

これだとTextureのサイズが元に戻って四角っぽく表示されるかもしれないですが、X軸方面の垂直面が引き延ばされるのかどうかの確認が先です。

結果です。

おお、完璧に直っています。

うーん。

何で?

これは全部の実装が終わってから検討します。

この後は微調整をしているだけです。

結果だけ示します。

5.2 DecalがX方面の垂直面に引っ張られないようにするための実装

まずは先程の実装が何をやっているのかを確認します。

最初はWorld Positionの値を取って来ます。

そこにParameterで決めた値を掛けています。

今回は単に0.01を掛けただけです。

これはWorld Positionの座標をそのまま使用したら値が大きすぎるから小さくしているだけです。

以下の様にMaskしてLerpのAとBの値にしています。

GBという事はR方面のUV値を決めているんでしょうね。

ここで言うR方面はXに当たるはずです。

あ、分かった。

という事はこの値は使用するStatic MeshのNormalの値の内どれだけXY方向にひっぱられているのかを示してるわけです。

だからAlpa値は

NormalのMask(G)になる訳です。

Alpha値を計算するのにNegativeな値は要らないのでAbsノードで全部Positiveにします。

次のRoundノードの目的が分かりませんね。

Roundしたら0か1しかなくなります。

LerpのAlpha値が0か1になったらUV値はどうなるんでしょうか?

Static Meshが垂直の場合は関係ないでしょう。

球のような曲面の場合はどうでしょうか?

やっぱり球の途中でTextureの模様が突然変化しています。

これは形は違いますが、Ben Cloward先生のTri-PlannerのTutorialで勉強した内容と同じ原則に支配されています。

試しにRoundノードを外してみました。

結果です。

Textureの模様がオカシイかもしれません。しかしつなぎ目はしっかり繋がるようになりました。

しかし今度は平面の結果がおかしくなってしまいました。

あれ。

実装を元に戻したのに直りません。

以下の部分のNodeの組み合わせを変更したのを忘れていました。

RoundノードのTestはもう一回します。

もう一度Roundノードを外しました。

結果です。

Sphereの模様が変わっただけですね。

Cubeの模様は普通になっています。

結果をまとめます。

RoundノードがあるとSphereは途中で切れたようになってしまいましたが、歪みはないです。

Roundノードがない場合は、Sphereは途中で切れた感じはないですが、模様は歪みました。

どちらも一長一短がありますが、この結果だけで判断するならRoundノードが有った方がTextureの模様がしっかり再現されているのでましな気がします。

5.3 Decal Renderer in Unreal Engine 5.2 Niagara Tutorial [7]を勉強した感想

Decal Materialはほとんど使用した事がないので、今回の勉強は助かりました。

基礎を抑える事が出来ました。

要はDecalはTextureをProjectしている訳です。Lightで模様を投影しているのと同じです。

そこがプラモデルのDecalとは違うところです。

このやり方だとBen Cloward先生のところで勉強したTriplanar Projectionの原則がもろにDecal Materialにも降りかかって来ます。

その結果、X方面の垂直面にはDecalは伸ばされて貼られるようになってしまいました。

ここでCGHOW氏が取った解決策も、Ben Cloward先生のTriplanar ProjectionのTutorialで既に検討された内容で、その方法の持つ長所と短所は既にTriplanar Projectionのところで議論された内容と同じ結果になりました。

結論としはDecalを使用する箇所はほぼ平面にしておく。です。

私がTriPlanar Projectionを勉強して得た感想は、Material側を万能にするよりもそのMaterialが使用出来る箇所を限定して、そのMaterialの短所が見えにくくする。です。

同じ事がDecal Renderingでも言えそうです。

6.戦闘システムの続きを作成する

6.1 先週作成した指示Iconを全部のWidgetで使用する

先週以下のIconを作成しました。

指示のあるWidget全部でこのIconに置き換えます。

まず戦闘開始画面です。

次の画面です。

分かり易い。

この吹き出し形式、分かり易いだけでなく、指示に対して反抗したり反発したりしたくなくなります。

遂に恐れていた事態が発生しました。

顔が横に伸びてしまっています。

吹き出しの大きさに関わらず顔のサイズは一定にしたかった。

以下の様にセリフを2段に変更しました。

吹き出しのサイズと吹き出しを喋るCharacterのサイズは別にしないと、Characterの見た目が変になるという知見を得ました。

使用する魔法を選択する時です。

回復魔法や攻撃力2倍魔法を選択すると

以下に示した様にセリフが変わります。

更に相手を選択すると

Instructionのセリフがまた変わります。

交換魔法を選択した場合は以下のセリフが表示されます。

これで完成です。

6.2 召喚するMonsterを選択するWidget

ここが分かりにくいんです。

このWidgetの目的は召喚するMonsterを決定する事です。

ところが、そもそも初めてGameをするUserはこのGameの仕組みを知らないので

  • 「左翼、中央、右翼に召喚するMonsterを選択して下さい」
  • 召喚するMonsterを魔術書から壺にDrag and Dropして下さい

と説明しないとここで何をしなければならないのか、あんまりはっきりしないです。

これは今直してしまいましょう。

「召喚する三体のMonsterを選択して下さい。」

こっちの方が分かり易いですね。

うーん。

でも、まだ分かりにくいです。

あ、理由が分かりました。

ここは召喚するMonsterを選択しています。

しかし実際には、それぞれのMonsterが召喚する場所も選択しています。

これがこのWidgetがよく分からない要因になっているんです。

「三体のMonsterの配置を決めてください。」

こっちで行きましょう。

このWidgetの目的は、「戦闘で使用する三体のMonsterの配置を決めてください。」にします。

そうすると左翼、中央、右翼の意味が何となくでも通じるようにもなります。

これから戦闘するなら左翼や右翼に兵隊を配置するのも意味が通じます。

もしくはここは2つのWidgetに分けるのも手ですね。

  • 一個目のWidgetで戦闘に使用するMonsterを選択します。
  • 二つ目のWidgetでそれぞれのMonsterの配置を決定します。

でもこのやり方を採用するとまたUIからProgrammingを変更すると言う、やってはいけないPatternにはまりそうです。

ここはMonsterを召喚するという最初の部分は捨てましょう。

このWidgetでするのはMonsterの配置を決定する事だけにします。

そうすると今まで、あった魔術書とか壺とかのIllustrationも無用になります。

しかもこれならWidgetに書かれているCodeを変更する必要もありません。

これは来週考える事にします。

7.Gaeaの勉強

今週は病院に行く用事は無くなってしまったんですが、Geologyの勉強もする事にします。

Geologyの勉強をした後で、先週のMind Mapの続きをやる事にします。

7.1 Geologyの勉強

7.1.1 勉強方法について

Geologyは病院で待っている時に見て勉強する事にします。

教材は以下に示したYouTubeにあったHawaii大学のGeologyのLectureです。

これを勉強します。

どうやって勉強しようかな?

これYouTubeの動画なんで、一個のLectureをトコトン見る事も可能なんですが、実際の大学の講義だったらそういう風には勉強しないです。

分厚い教科書が有ってそれを講義の前までに読んでおいてその後で、講義を聞いてみんなで質問したり議論したり、小テスト(Quiz)を受けたりします。

まずGeologyの教科書がないです。あんまり買う気もないです。

当然、質問する教師もいませんし、テストもないです。

ここはLectureをきっちり聞いてまとめる事にします。

7.1.2 Geology 1 (The Science of Geology) [6]を勉強する

まず軽く全部見ます。

9分位までは前回見たみたいですので、その続きから見る事にします。

これは既に見ています。

見てるうちに内容を思い出してきました。

次のTutorialを見る事にします。

Geology 2 (Plate Tectonics) [7]を見ます。

見終わりました。

情報量多すぎ。

Lectureの最後で、最初は覚える事や理解する事が多すぎて混乱するけど一端、これらの事を理解しないと次にいけないと言っていました。

まず話の流れからまとめます。

今回のLectureは題の通りPlate Tectonicsについてです。

これ最初は信じられないけど大陸が移動する説みたいな話から始まっていて、アメリカではまだかなりの人が大陸が移動する事を信じていないらしい事が判明してそっちの方がびっくりしました。

そういえば、聖書によれば地球の歴史は僅か四千年位だそうです。

そういう話を神様が言っているんだから正しいと考えるアメリカ人は結構いるらしいです。

神の威光の凄さで、思考を奪ってしまう訳です。

そういう人達には、単なる人が理論的に推測して導き出した大陸が動いているという説は受け入れがたいんでしょうね。

これ逆な意味で言うと、一般的な日本人だと聖書読んだことない人がほとんどだと思うので、逆に大陸が移動する話を聞いても疑問にすら思わないで、そうなんだ、で終わってしまいますね。

これはこれで科学が発展する可能性を消してしまいます。

話はGeologyのLectureに戻りますが、全部の章の内容をまとめたらとんでもない量になってしまうので、Lectureの中から私が興味を持った話を3つだけまとめる事にします。

  • Plate Tectonicsを提唱した人は何で大陸が動くのかについては説明できなかったが、第二次世界大戦の潜水艦の艦長かつGeologistの人が海底がMantleの流れにそって広がっていてそれに伴って大陸も移動していると説明してやっと大陸が移動する事が説として受け入れられたこと。
  • Plateが生まれる箇所よりPlateが地球に戻る箇所であるConvergentの方が気になりました。やっぱりこういう現象は身近な存在が側にあるかどうかです。日本の場合は、Convergentの3つTypeの内のOceanic-Continentalに当たりますね。
  • Hotspotの存在。Hawaiiは何で誕生したのかを理解しました。

うーん。

これだけだと一寸短いですね。

もう少し興味のあった話もまとめると、Geologyでは仮説を認めるための証拠集めに重きをおいている印象を受けました。

この仮説を認めるための証拠となる話の中で興味深かったのは、

  • 別な大陸で同じ生物の化石が見つかったり、熱帯地方に位置しているのにGlacierの跡が見つかったりする大陸の話など
  • 海底が持つMagnetic Polarityの変化の話。よく方位磁石の指す向きは北だが、数千年前は南を指していたみたいな話は聞いたことがありますが、これどの程度科学的に正しいのか疑問だったんですが、初めて本格的な科学のLectureでこの話を聞きました。という事はこの話は科学的に完全に認められているという事になりますね。
  • Hotspotの一例であるHawaiiの島がPlateの動きに沿って移動している件

でした。

この溶岩が冷えて固まるときにその時の地球の磁場を記憶しておくって話、私が最初に知ったのは雑誌ムーを読んだ時です。しかも富士の樹海で迷子になり易い理由の説明で読んだんです。

ので、本当にこの地場の話は科学的に正しいとされている説なのか長年に渡って疑問を持っていたんですが、今回の勉強でこれは正しいと確認出来ました。

今回のGeologyの勉強はこれくらいにしておきます。

後は専門用語をどれくらい覚えるのかの確認が必要です。これは来週検証する事にします。

7.2 GaeaのTutorialの作成

先週から始めたGaeaのTutorialの作成の続きを行います。

7.2.1 先週の復習

先週、何をやったのかを確認します。

先週やった内容を簡単にまとめるとMind MapにGaeaのまとめを作成しました。

以下の部分をまとめただけでした。

7.2.2 Mind Mapを整理する

今週は更に精錬させていきます。

以下の様に整理しました。

2つに絞って説明します。

一つ目はこのTutorialについてです。

このTutorialの目的、利点そして対象者について説明します。

まず目的ですが、

UE5のLandscapeを作成するためのTutorialです。

そして、もう一つの目的が学習者が出来るだけ早くGaeaを使用出来るようになる事です。

そのために独自の方法で勉強します。

簡単にその方法を説明すると

ManualのSpellが間違っていました。

それはともかく、この2つに特化してTutorialを作成しています。

その結果、

前にGaeaに限らず、他の地形生成Softの勉強をしたけどよく分からなかったという挫折した人でも理解出来るようになりました。

しかも学習深度、つまり学習した内容をどれだけ深く理解出来たのかについても他のTutorialで勉強するより段違いに良くなりました。

更に、

コスパはCost Performanceの和製英語だと言われていますが、そもそもCost Performance自体が英語じゃないです。

あえて英語にするとしたらLearning Per Costでしょうか?

タイパのTime Performanceも同じで、Learning Per Timeなら意味が通じると思います。

それはともかく、コスパ

です。

そして

タイパは

と良い事だらけ。

しかしやっぱりそんな都合のいい話ばかりではなく

となって勉強しないで身に付ける事が出来るわけではありません。

ではどんな人ならこのTutorialで勉強してGaeaの使用方法を覚える事が出来るのかというと

まずはUE5でPhoto-RealisticなLandscapeを作成したい人向けです。

更に言えば、

更にUE5についても基礎を理解している必要があります。

特に

を理解しておく必要があります。

ここまでが前半の説明です。

これから後半に入ります。

ここからQuadSpinner Gaeaの説明に入ります。

そもそもQuadSpinner Gaeaって何?

こっちの説明に変更しました。

こっちの方が分かり易いです。

と思ったら次の項目で同じ事を書いていました。

元に戻します。

Landscapeを作成するためのSoftです。

ここからGaeaのHomepageに飛んでLandscapeの例を表示します。

当然UE5に元々あるLandscapeの機能とどう違うのかと疑問が出る訳です。それについての解答です。

これはまあ、読んだままです。

実はGaeaのような地形生成Softは他にもあり有名どころでは以下の物が有ります。

これらのSoftは大きく言って2つの種類に分けられます。

地形生成のみを行うSoftとそれ以外の事も出来るSoftです。

地形生成SoftにはGaea以外のSoftもあります。

地形の生成以外も出来る万能型のSoftには以下の物があります。

それぞれのSoftの特徴を簡単に解説します。

はい。

これらの他の地形作成Softと比較してGaeaの優れた点は

などがあります。

ここで無料版でも商業利用できる点を強調しておきます。

これ現状の地形生成SoftではGaeaだけです。

使用した感想のまとめです。

更にGaeaのTutorialも以下に示した部分は作成しました。

7.2.2 録画してみる

試しに録画してみます。

2回程、録画してみました。

自分で聞いた限りではかなり良い感じです。

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

Mind Mapは来週あたりには有料版にUp-gradeします。

どう考えてもUp-gradeした方がお得ですので。

8.Houdiniの勉強

Houdiniの勉強は少しだけお休みして、Free Time Coder氏のUnreal PCG Tutorial [8]を勉強します。

今週はUnreal 5.2 Preview PCG Tutorial - Part 2 – Splines [9]を勉強します。

8.1 Unreal 5.2 Preview PCG Tutorial - Part 2 – Splines [9]を勉強する

まず軽く全部見ます。

見ました。

Splineで先週作成したPCGに木の生えない箇所を追加するのかと思ったら、Splineを使用してPCGを作成していました。

やっぱりDensityの値はRandomに割り振るだけじゃなくて、ある法則に基づいて一義的に決める事が出来ましたね。

これが無いとDensityの役割があんまり意味がないと先週思いましたが、早速ある事が分かりました。

その後で、Splineを使ってPCG内のPointを消す方法も説明していました。

更に複数のSplineを使用する方法やその場合の注意点なども説明しています。

以下に内容をまとめます。

<Intro>

今回は5.2 Previewでテストするそうです。

当然、このTutorialで実装している内容が将来的には出来なくなる可能性があります。と警告していました。

<Spline>

今回のために新しいPCGを作成しています。名前はPCG_Splineと名付けています。

中を開いてGet Spline Dataノードを追加します。

そしてGet Spline DataノードのActor FilterにAll World Actorsをセットします。

更にActor SelectionにTagをセットしActor Selection TagにTestSplineをセットします。

要するにこれは

どのActorがSplineのDataを持っているのか分からないので、Level(PCGの指定している範囲内)に配置されているActorを全部調べます。そのActorの中でTest SplineというTagを持っているActorのSplineのDataを返します。

という意味です。

Actor ClassのBPを作成します。名前はBP_OurSplineです。

中を開きSplineを追加します。

そしてStart with Tick EnabledのCheckを外します。

そしてTagにTestSplineを追加します。

これでこのBPのSplineのDataが先程のPCGのGet Spline DataノードにPassされるようになりました。

今度はPCG内に戻り、Get Spline DataノードにSpline Samplerノードを追加します。

このNodeの使用方法を説明するためにPCGと先程作成したBPをLevel上に配置します。

Level上でBPのSplineを以下の様にセットしました。

Spline SamplerノードをDebugにセットします。

Level上に戻りPCG Splineを選択してGenerateを押します。

SplineのImageが以下の様に変化しました。

よく見るとオレンジ色がPointのようです。

<Distance>

ここからSpline SampleノードのParameterの説明になります。

Modeの設定をSubdivisionからDistanceに変更しました。

Distance Incrementの値を100から300に変更しました。

Spline上のPointが少なくなりました。

うーん。

正直少なくなったのかどうかよく分かりません。

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

次にSplineの設定をClosed Loopにします。

そしてSpline SampleノードのDimensionの設定をOn Interiorに変更します。

するとLevel上のSplineが以下のような表示に変更になりました。

これはPointが表示されているんでしょうか、なんでPointのSizeがこんなに大きくなっているんでしょうか?

先程のSpline上のPointはかなり小さかったです。

Splineの形状を変化させても以下のような表示になっています。

見た目を直すためにTransform Pointsノードを追加します。

そしてTransform PointsノードのMinとMaxのPointを0.2にします。

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

今度は木の大きさを決定できるような設定にします。

Splineのまわりの木は小さく、Splineの中央に近づく程、木は大きくなるはずです。

そのような設定を組みます。

Spline SamplerノードのInterior Density Falloff Curveの値を以下の様に設定します。

結果です。

この結果をRemapしたい時はDensity Remapノードを使用します。

設定を以下の様に変更します。

In が変換前の値でOutが変換後の値という事みたいです。

InputされるDensityの値の最小値は0で最大値は1です。それ以下の値とそれ以上の値は、入りません。(おそらく0と1に丸められる)。

そしてInputされたDensityの値は0が1、1が0に変換されます。

その間の値はLinearにInterpolateされて変換されてるはずです。

結果です。

これ見た時、何で直接Spline SamplerノードでこのDensityの指定をしなかったのか不思議に思いました。

そしたらTutorialでも後でSpline Samplerノードの値を調整しても同じ結果になります。

と言って、Spline Samplerノードの値を直していました。

<Fixed Distance>

ここでSplineのSizeを大きくしてみます。

黒い部分から灰色になって白くなる割合はSplineのサイズが小さい時と同じままです。

これは色の変化はNormalizeされているので当然そういう結果になります。

ところがこのTutorialではそれは望んでいないそうです。

黒い部分の幅はどんなSizeでも同じにしたいそうです。

それで以下の様に実装を改良します。

Spline Samplerノードを更にもう一個追加します。

このSpline Samplerノードは

ModeをDistanceにしてDimensionにOn Splineをセットします。

そして以下の様にDistanceノードを追加します。

DistanceノードのSourceには最初のSpline Samplerノードの結果を、Targetにはさっき作成したSpline Samplerノードの結果を使用します。

そしてDistanceノードの

Set DensityをEnableして

Maximum Distanceの値を1000に変更します。

結果です。

SplineのLoopのSizeを大きくしても黒い部分の大きさは変化しなくなりました。

<Path>

今度はこのSplineのLoopの中を通るPath、つまり道を作成します。

まず新しいBPをActorから作成します。

名前はBP_PathSplineとします。

こっちもSplineを追加します。

SplineのScale Visualization WidthをEnableします。

するとSplineの表示が以下の様になりました。

更にScale Visualization Widthの値を100に変更します。

結果です。

更にTagの名前をPathに変更します。

そして先程のPCGに新しいGet Spline DataノードとSpline Samplerノードを追加します。

そしてGet Spline DataノードのActor Selection TagにPathをセットします。

そしてLevel上に今作成したBPを配置します。

Bounds Modifierノードを追加します。

Bound MinとBound Maxの値を以下の様に変更しました。

結果です。

BoundのZの値を200にしました。

結果、

このSplineの結果と先程のSplineの結果が重なるようになりました。

そしてこのSpline (Path) の結果を先程のSpline (Test Spline)の結果から差し引きます。

DifferenceノードのSourceにTest Splineの結果を、そしてDifferencesにPathの結果を追加します。

更にDifferenceノードのDensity FunctionにBinaryをセットし

DifferenceノードにDebugをセットし結果を見ます。

見事に道が形成されました。

これWater Bodyでも同じ様に出来るんでしょうか?

実装する時に試してみます。

この後はCaveat(警告)の紹介でした。

まず最初のCaveatは先程のPathを移動させても別な場所のPointは消してくれません。

この理由はPCGのGet Spline Dataノードの

Select Multipleが選択されていないからです。

このSelect MultipleをEnableすると以下のような結果になります。

新しく移動したところのPathと重なっているところのPointも消す事が出来ました。

これはGet Spline DataノードのSelect Multipleのせいなのか、私は単にLevel上のPCGのGenerate Buttonを押し直すだけで良い気がします。

今度はTest SplineのBPをもう一個配置しました。

2個目のTest Splineには何も生成されません。

今度はTest SplineのDataを集める方のGet Spline Dataノードの

Select MultipleにCheckを入れます。

すると以下に示した様に。

すると後から作成した小さいSplineのLoopの方にもPointが生成されるようになりました。

ただしこの小さい方のSpline Loopの中のDensityのPointの数は、LoopのSizeを変更しても変化しません。

最後にSelect MultipleをEnableしても両方の結果を示さない(Bugらしい。)場合、

以下の様にUnionノードを追加すると直るそうです。

これはPreview版でのテストなので今のUE5.2の場合はどうなのか不明です。

以上でした。

この実装は来週やる事にします。

9.UEFNの勉強

今週は先週の続きの実装をやります。

 Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [10] の実装の続きです。

2023-05-15のBlogに今週の実装方法をまとめた内容があります。

このBlogと Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [10]を見ながら実装していきます。

9.1  Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [10] の実装の続き

<Creating an Island>

まずBlankのTemplateを使用してProjectを作成しています。

UEFNを開いて島Templateから

Blankを選択します。

また以下の設定が分かりません。

Tutorialで確認したらDefaultのままでした。

ので作成を押して新しいProjectを作成しました。

以下のMapが生成されています。

Tutorialと全く同じです。

以下に示した雲、Volumetric Cloudだと思っていたんですが違うみたいです。

Item LabelにVolumetric Cloudは無いです。

ActorにもVolumetric Cloudは存在していません。

今度はPoint Lightを追加します。

しました。

そしてWorld SettingにあるDisable All Time Of Day management...をEnableします。

おお、ここにはすべての時間帯マネージャーを無効化と書かれていますね。

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

確認取れたので元に戻します。

今度はLandscapeを作成します。

Landscape Modeに変更するとDefaultで以下の設定になっていました。

作成を押しました。

Landscapeが生成されました。

今度はSectionを追加してみます。

Manageを選択してAddを使用します。

日本語だと管理を選択して追加を使用します。

追加出来ました。

以下のようなLandscapeを作成しました。

<Adding Water>

今度は海を追加します。

All->Fortnite->Environment->WaterからOcceanを選択します。

ありました。

Occeanを追加します。

かなり凄くないですか?

海のSpecular LightとかUE5より凄くない?

UE5ではまだExperimentであるWater Body SystemがUEFNでは既に実装化されている事に疑問を抱きつつ、先に進みます。

Affects LandscapeをOffにしました。

結果です。

これはこれでいいよな。

Landscapeの作成をもう少し工夫したらこっちの方が良いかもしれません。

Oceanを選択したまま、Hを押すとOceanが消えるそうです。

試してみます。

消えました。

Ctl+Hを押すとOceanが戻るそうです。

戻りました。

2023-05-15のBlogにOceanのSpline Pointを選択してScale UpするとSplineのCurveが鈍角になると書かれています。

これが

Scale Upすると

これに

なるそうです。

試してみます。

以下に示した、一寸鋭角なSpline Pointを作成しました。

このSpline PointをScale Upします。

すっごい丸くなっています。

Riverも追加しました。

なんか形が変なのでもう一回最初から作り直します。

以下にLandscapeが変な形状に変形となっている箇所を示します。

Oceanの方がLandscapeより高い位置にセットされているため、この現象が起きています。

Water Body Oceanの高さをLandscapeと同じにします。

Landscapeの海岸線における盛り上がりは無くなりました。

ただし島全体の形状が以下のようになってしまいました。

以下の様にLandscapeを平にしました。

以下の様にLandscapeを変形しました。

更に海底にあたる部分や海岸に当たりそうな部分には、Paintで砂に変更しました。

Water Body OceanをCtrl+Hで表示すると以下の様になりました。

これは良いかもと思いましたが、以下に示したような問題が発生しています。

LandscapeがOceanより低い場合は、水が地面より高い位置で海岸線を形成しています。

逆にLandscapeが海岸線より高い場合は、Landscapeと海岸の間に隙間が生じています。

最初、Affects LandscapeをOffにしたら問題は解決しそうと思っていましたが、この結果を見る限り、駄目そうです。

Affects LandscapeをOnにしました。

更に海岸線のLandscapeをScriptし直して海岸が盛り上がっている箇所は消しました。

海岸線は丸いままです。

うーん。

Tutorialを見直します。

以下にTutorialの島を示します。

Spline PointのTangent Lineを調整したり、Scaleを大きくしたりして調整してはいましたが、基本的には丸いままです。

Unreal Senseiの一言、「島は丸い」で完結していました。

画面を見ていたら気持ち悪くなりました。

今週はこの辺で終わりにします。

残りは来週やる事にします。

10.YouTube動画の作成

今週は、一個動画を取って、その動画をDavinci Resolveで編集します。

10.1 化学調味料について

今週は化学調味料アメリカでどう思われているのかについての動画を作成してみます。

まずMind Mapを作成します。

こんな感じです。

アメリカでどう思われているのか?

以下の3つについて説明します。

まず以下の内容についてです。

と断定しています。

これ知り合いに感想を聞いたら、「政治的な発言の意味が分からない。」と言われました。

英語だとPoliticsな問題にした。とかよく言うのです、政治的な発言と言うと、右左の問題に変換したりする事を指します。

簡単に言うとPoliticsな問題と言うのは、どっちか正しいかを判明するのが目的じゃなくてどっちが勝つのかが問題になります。

しかしこの場合の政治的な発言は、差別などの社会が解決すべき問題と言う意味で使用しています。

具体的に言うと、化学調味料を大量にまぶしたポテトチップスは平気で食べるのに、中華料理を食べたら化学調味料のせいで手がしびれたとか文句を言う人達です。

完全にアジア人に対しての人種差別です。

でもこの話は結構昔の話で、今こんな事を言う人はあんまりいません。

ごくたまにそういう人もいるかもしれませんが、

今は逆にそういう発言をすると周りの人から

と思われてしまいます。

ここで気を付けないといけないのは、

と言う事実です。

これアジア系のアメリカ人は何故かアジア人より自分たちが上だと信じている人達が居て、他のアジア人を見下す訳です。

つまりアジア人だからアジア人に対して人種差別をしないとは限らないんです。

はっきり言えば、化学調味料で体が悪くなると発言したらアジア人でも「あ、こいつアジア人なのにアジア人を差別するやつだ。」と思われてしまう可能性もあります。

と言う訳です。

でも科学的にはどうなの?

と疑問に思われると、

それに対する解答ですが、

化学調味料が体に悪いと述べた論本は一本だけだそうです。

しかも

つまりSample数が少なすぎたそうです。

これです。

この事をまあ普通の大卒Levelのアメリカ人なら知っています。

そして科学的根拠のない発言、(この場合は化学調味料が体に悪いと言う意見)をネットで広めたら、その後で訴えられた場合、とんでもない賠償金を負担しないといけない訳です。

ので自分から軽はずみに、化学調味料が体に悪いとは絶対に言いません。

あ。

こういうのを全部、Blogにまとめるのもなんかおかしいです。

そもそもBlogに書いていた前文の内容を動画にしてYouTubeにまとめるのがこの節の主旨で、その動画の内容はYouTubeで確認すれば良いだけです。

10.2 動画の編集

動画の編集をDavinci Resolveで行います。

出来ました。

こんな感じです。

この動画に使用出来るGameの編集動画は無いのでBackgroundは黒です。

11.まとめと感想

今週はBlog自体はかなり短いです。

でもそれは編集などBlogに書かない部分が増えたからです。

これからはTutorialの作成などもYouTubeにShiftしてBlogは徐々に収縮していこうと思っています。

12.参照(Reference)

[1] OlympusMonsTutorials. (2021, May 9). C++ DirectX 12 Game Engine - [S01E04] - Settings and Loggers [Video]. YouTube. https://www.youtube.com/watch?v=Q7JKBDNIgvI

[2] Stevewhims. (2022, July 27). DXGI_SWAP_CHAIN_DESC (dxgi.h) - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/dxgi/ns-dxgi-dxgi_swap_chain_desc

[3] Stevewhims. (2022, July 27). ID3D12Device::CreateRenderTargetView (d3d12.h) - Win32 apps. Microsoft Learn. https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12device-createrendertargetview

[4] NumenBrothers. (2023a, February 11). Let’s Build the RPG! - 55 – Unreal Engine 5 Water Ocean and Island Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=RVgxi-PN8c8

[5] Ben Cloward. (2023, January 19). Hair Shaders - Advanced Materials - Episode 13 [Video]. YouTube. https://www.youtube.com/watch?v=eP-orfi4r68

[6] Earth and Space Sciences X. (2015, October 30). Geology 1 (The Science of Geology) [Video]. YouTube. https://www.youtube.com/watch?v=fgnvKVzZZes

[7] Earth and Space Sciences X. (2015, October 30). Geology 2 (Plate Tectonics) [Video]. YouTube. https://www.youtube.com/watch?v=z58vSr_VTvk

[8] Unreal PCG Tutorial. (n.d.). https://www.youtube.com/playlist?list=PLA03OHAaHgYpo0enf8p-2oEpja3grLOKZ

[9] FreetimeCoder. (2023, March 27). Unreal 5.2 Preview PCG Tutorial - Part 2 - Splines [Video]. YouTube. https://www.youtube.com/watch?v=zp1pvaZraGM

[10] Fortnite Sensei. (2023, March 31). Unreal Editor for Fortnite Beginner Tutorial - UEFN Starter Course! [Video]. YouTube. https://www.youtube.com/watch?v=0CcoOq963O8